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 20x (123.76 kB)
Aplikace je včetně zdrojových kódů v jazyce Java