Lekce 2 - Annotation processor v Javě - Tvorba Maven projektu
V minulé lekci, Annotation processor v Javě - Úvod do anotací, jsme se dozvěděli k čemu jsou anotace dobré a jak se používají.
Tato lekce bude čistě o tvorbě Maven kostry projektu, který použijeme v následujících Java tutoriálech k demonstraci využití Java Annotation Processoru.
Maven projekt
V projektu budeme využívat Maven, který se postará o jeho správnou strukturu a závislosti. Než budete pokračovat, přesvědčte se, že máte Maven nainstalovaný. Celý projekt se bude skládat z následujících 3 modulů:
parent-module- Rodičovský modul zastřešující ostatní moduly.annotation-processing- Zde bude uložený kód pro samotný Java Annotation Processor.annotations- Zde budou anotace použité Java Annotation Processorem a modulem pro aplikaci.application- Zde bude kód aplikace, který bude využívat anotace.
Tvorba kostry projektu
Začneme tím, že se přesuneme do adresáře, kde budeme projekt tvořit a vytvoříme kořenovou složku projektu.
Kořenový pom.xml
Přesuňte se do této kořenové složky a založte nový prázdný soubor
pom.xml. Je důležité dodržet jeho název. Tento soubor se
využívá pro Maven projekty a obsahuje kompletní informace pro Maven.
Do souboru vložíme následující informace:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cz.itnetwork.zdravic</groupId> <artifactId>parent-module</artifactId> <version>1.0.0-SNAPSHOT</version> <name>parent-module</name> <packaging>pom</packaging> <properties> <maven.compiler.target>11</maven.compiler.target> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.release>11</maven.compiler.release> <maven.compiler.encoding>UTF-8</maven.compiler.encoding> </properties> <modules> <!-- TODO vložit sem moduly --> </modules> <build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> </plugin> </plugins> </pluginManagement> </build> </project>
Tímto říkáme Mavenu, že tento soubor bude sloužit jako předek pro
všechny moduly, které budeme tvořit za moment. Obsahuje standardní informace
o projektu, jako jsou: groupId, artifactId,
version, name a packaging. Následuje
položka properties, která říká kompilátoru, jakou verzi Javy
budeme v projektu používat. V položce modules se specifikují
všechny moduly, které mají být v projektu zahrnuty. Nakonec je zde položka
build, která říká Mavenu, jakou verzi pluginu pro kompilování
má použít.
Moduly
Začneme tvořit jednotlivé moduly. Nejdříve vytvoříme modul
annotations, který nemá žádné závislosti.
Vytvoření modulu
annotations
V kořenové složce si otevřeme příkazový řádek (na Windows kliknete v průzkumníku v dané složce pravým tlačítkem za držení Shift a vyberete "Zde otevřít příkazové okno") a vložíme do něj následující příkaz:
mvn archetype:generate \ -DarchetypeGroupId=org.apache.maven.archetypes \ -DarchetypeArtifactId=maven-archetype-quickstart \ -DarchetypeVersion=RELEASE
Po chvíli načítání se nám spustí průvodce tvorby modulu. Nejdříve
nás požádá, abychom vyplnili groupId a artifactId
(zadáme cz.itnetwork.zdravic a parent-module). Verzi
a balíček můžeme potvrdit stiskem klávesy Enter. Nakonec se
ukáže přehled zadaných parametrů. Tento přehled také potvrdíme klávesou
Enter a máme modul hotový. Tedy téměř.
pom.xml modulu
Otevřete si další, nově vytvořený soubor pom.xml, který
trochu zredukujeme. Pro tento modul stačí znát pouze parent module a nic
víc. Žádné další závislosti se zde definovat nebudou. Můžete tedy
odstranit vše kromě nastavení modelVersion, parent
a artifactId:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <artifactId>annotations</artifactId> <parent> <artifactId>parent-module</artifactId> <groupId>cz.itnetwork.zdravic</groupId> <version>1.0.0-SNAPSHOT</version> <relativePath>../</relativePath> </parent> </project>
Modul
annotation-processing
Úplně stejným způsobem založíme zbylé dva moduly:
annotation-processing a application. Uvedu již jen
pom.xml soubory pro jednotlivé moduly. V modulu
annotation-processing musíme přidat dvě závislosti:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <artifactId>annotation-processing</artifactId> <parent> <artifactId>parent-module</artifactId> <groupId>cz.itnetwork.zdravic</groupId> <version>1.0.0-SNAPSHOT</version> <relativePath>../</relativePath> </parent> <dependencies> <dependency> <groupId>cz.itnetwork.zdravic</groupId> <artifactId>annotations</artifactId> <version>${project.parent.version}</version> </dependency> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.1</version> </dependency> </dependencies> </project>
První závislost je na modulu annotations a druhá závislost
je na knihovnu velocity-engine-core, kterou budeme využívat v
budoucnu.
Modul application
Tento modul má jedinou závislost - modul annotations. Dále
musíme nastavit zpracování anotací ve fázi kompilace a zároveň
přidat vygenerované soubory do cesty pro kompilaci výsledného projektu. V
tomto úkolu nám pomohou Maven pluginy:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <artifactId>application</artifactId> <parent> <artifactId>parent-module</artifactId> <groupId>cz.itnetwork.zdravic</groupId> <version>1.0.0-SNAPSHOT</version> <relativePath>../</relativePath> </parent> <dependencies> <!-- cz.itnetwork.zdravic.annotations --> <dependency> <groupId>cz.itnetwork.zdravic</groupId> <artifactId>annotations</artifactId> <version>${project.parent.version}</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <version>1.7</version> <executions> <execution> <id>add-source</id> <phase>generate-sources</phase> <goals> <goal>add-source</goal> </goals> <configuration> <sources> <source>${project.build.directory}/generated-sources/</source> </sources> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <generatedSourcesDirectory> ${project.build.directory}/generated-sources/ </generatedSourcesDirectory> <annotationProcessorPaths> <path> <groupId>cz.itnetwork.zdravic</groupId> <artifactId>annotation-processing</artifactId> <version>${project.parent.version}</version> </path> </annotationProcessorPaths> <annotationProcessors> <annotationProcessor> cz.itnetwork.zdravic.annotationprocessing.ZdravicProcessor </annotationProcessor> </annotationProcessors> </configuration> </plugin> </plugins> </build> </project>
První plugin, který přidá generované třídy do projektu, se nazývá
build-helper-maven-plugin. V jeho konfiguraci si můžete
všimnout, že mu vlastně říkáme: ve fázi generate-sources si
přidej na seznam třídy ze složky
${project.build.directory}/generated-sources/.
Druhý plugin se stará o samotné spuštění Annotation Processoru. Nejdříve mu nastavíme, kam má generované soubory ukládat a přidáme cestu k modulu, který anotace zpracovává. Nakonec se vybere processor, který bude pluginem zavolán. Těchto processorů může být i vícero:
<annotationProcessor> cz.itnetwork.zdravic.annotationprocessing.ZdravicProcessor <!-- Sem se může vložit další annotation processor --> </annotationProcessor>
Kořenový pom.xml
Na úplný konec se ještě přesuneme do kořenového pom.xml
souboru a přidáme reference na všechny tři vytvořené moduly.
<modules> <module>annotations</module> <module>annotation-processing</module> <module>application</module> </modules>
Tímto máme vytvořenou kostru projektu, na kterou budeme v dalších lekcích tohoto kurzu navazovat.
V příští lekci, Annotation processor v Javě - Hello annotation world, si představíme základní annotation processor a pozdravíme uživatele pomocí anotace.
Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 21x (123.76 kB)
Aplikace je včetně zdrojových kódů v jazyce Java

