IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

2. diel - Annotation processor v Jave - Tvorba Maven projektu

V minulej lekcii, Annotation processor v Jave - Úvod do anotácií , sme sa dozvedeli k čomu sú anotácie dobré a ako sa používajú.

Táto lekcia bude čisto o tvorbe Maven kostry projektu, ktorý použijeme v nasledujúcich Java tutoriáloch k demonštrácii využitie Java Annotation Processor.

Maven projekt

V projekte budeme využívať Maven, ktorý sa postará o jeho správnu štruktúru a závislosti. Pred pokračovaním presvedčte sa, že máte Maven nainštalovaný. Celý projekt sa bude skladať z nasledujúcich 3 modulov:

  • parent-module - Rodičovský modul zastrešujúcej ostatné moduly.
  • annotation-processing - Tu bude uložený kód pre samotný Java Annotation Processor.
  • annotations - Tu budú anotácia použité Java Annotation Processor a modulom pre aplikáciu.
  • application - Tu bude kód aplikácie, ktorý bude využívať anotácie.

Tvorba kostry projektu

Začneme tým, že sa presunieme do adresára, kde budeme projekt tvoriť a vytvoríme koreňovú zložku projektu.

Koreňový pom.xml

Presuňte sa do tejto koreňového priečinka a založte nový prázdny súbor pom.xml. Je dôležité dodržať jeho názov. Tento súbor sa využíva pre Maven projekty a obsahuje kompletné informácie pre Maven.

Do súboru vložíme nasledujúce informácie:

<?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 hovoríme Maven, že tento súbor bude slúžiť ako predok pre všetky moduly, ktoré budeme tvoriť za moment. Obsahuje štandardné informácie o projekte, ako sú: groupId, artifactId, version, name a packaging. Nasleduje položka properties, ktorá hovorí kompilátora, akú verziu Javy budeme v projekte používať. V položke modules sa špecifikujú všetky moduly, ktoré majú byť v projekte zahrnuté. Nakoniec je tu položka build, ktorá hovorí Maven, akú verziu pluginu pre kompilovanie má použiť.

Moduly

Začneme tvoriť jednotlivé moduly. Najskôr vytvoríme modul annotations, ktorý nemá žiadne závislosti.

Vytvorenie modulu annotations

V koreňovom priečinku si otvoríme príkazový riadok (na Windows kliknete v prieskumníkovi v danej zložke pravým tlačidlom za držanie Shift a vyberiete "Tu otvoriť príkazové okno") a vložíme do neho nasledujúci príkaz:

mvn archetype:generate \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DarchetypeVersion=RELEASE

Po chvíli načítanie sa nám spustí sprievodcu tvorby modulu. Najskôr nás požiada, aby sme vyplnili groupId a artifactId (zadáme cz.itnetwork.zdravic a parent-module). Verziu a balík môžeme potvrdiť stlačením klávesy Enter. Nakoniec sa ukáže prehľad zadaných parametrov. Tento prehľad tiež potvrdíme klávesou Enter a máme modul hotový. Teda takmer.

pom.xml modulu

Otvorte si ďalšie, novo vytvorený súbor pom.xml, ktorý trochu zredukujeme. Pre tento modul stačí poznať len parent module a nič viac. Žiadne ďalšie závislosti sa tu definovať nebudú. Môžete teda odstrániť všetko okrem nastavenia 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

Úplne rovnakým spôsobom založíme zvyšné dva moduly: annotation-processing a application. Uvediem už len pom.xml súbory pre jednotlivé moduly. V module annotation-processing musíme pridať dve 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>

Prvý závislosť je na module annotations a druhá závislosť je na knižnicu velocity-engine-core, ktorú budeme využívať v budúcnosti.

Modul application

Tento modul má jedinú závislosť - modul annotations. Ďalej musíme nastaviť spracovanie anotácií vo fáze kompilácie a zároveň pridať vygenerované súbory do cesty pre kompiláciu výsledného projektu. V tejto úlohe nám pomôžu 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>

Prvý plugin, ktorý pridá generované triedy do projektu, sa nazýva build-helper-maven-plugin. V jeho konfigurácii si môžete všimnúť, že mu vlastne hovoríme: vo fáze generate-sources si pridaj na zoznam triedy z priečinka ${project.build.directory}/generated-sources/.

Druhý plugin sa stará o samotnej spustení Annotation Processor. Najskôr mu nastavíme, kam má generované súbory ukladať a pridáme cestu k modulu, ktorý anotácie spracováva. Nakoniec sa vyberie processor, ktorý bude pluginom zavolaný. Týchto processor môže byť aj viacero:

<annotationProcessor>
    cz.itnetwork.zdravic.annotationprocessing.ZdravicProcessor
    <!-- Sem se může vložit další annotation processor -->
</annotationProcessor>

Koreňový pom.xml

Na úplný koniec sa ešte presunieme do koreňového pom.xml súboru a pridáme referencie na všetky tri vytvorené moduly.

<modules>
  <module>annotations</module>
  <module>annotation-processing</module>
  <module>application</module>
</modules>

Týmto máme vytvorenú kostru projektu, na ktorú budeme v ďalších lekciách tohto kurzu nadväzovať.

V budúcej lekcii, Annotation processor v Jave - Hello annotation world , si predstavíme základné annotation processor a pozdravíme používateľa pomocou anotácie.


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 20x (123.76 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Java

 

Predchádzajúci článok
Annotation processor v Jave - Úvod do anotácií
Všetky články v sekcii
Anotácie v Jave
Preskočiť článok
(neodporúčame)
Annotation processor v Jave - Hello annotation world
Článok pre vás napísal Petr Štechmüller
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se věnuje primárně programování v Javě, ale nebojí se ani webových technologií.
Aktivity