NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

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

 

Předchozí článek
Annotation processor v Javě - Úvod do anotací
Všechny články v sekci
Anotace v Javě
Přeskočit článek
(nedoporučujeme)
Annotation processor v Javě - Hello annotation world
Článek pro vás napsal Petr Štechmüller
Avatar
Uživatelské hodnocení:
11 hlasů
Autor se věnuje primárně programování v Javě, ale nebojí se ani webových technologií.
Aktivity