Hogyan hozzunk létre egy Maven bővítményt

1. Bemutatkozás

A Maven sokféle plugint kínál, amelyek segítenek nekünk projektünk felépítésében. Találhatunk azonban olyan eseteket, amikor ezek a beépülő modulok nem elegendőek, és saját fejlesztést kell végeznünk.

Szerencsére Maven néhány hasznos eszközt kínál, amelyek segítenek bennünket ebben a folyamatban.

Ebben az oktatóanyagban meglehetősen praktikusak leszünk, és lépésről lépésre bemutatjuk, hogyan lehet a semmiből létrehozni egy Maven plugint.

Megmutatjuk azt is, hogyan kell használni projektjeinkben, és hogyan készíthetünk hozzá dokumentációt.

2. Plugin létrehozása

Az oktatóanyag alatt fejlesztünk egy plugint, amelynek neve counter-maven-plugin amely megszámolja a projektben található függőségek számát. Nagyon fontos betartani a Maven által javasolt plugin elnevezési megállapodást amikor kiválasztjuk a bővítményünk nevét.

Most, hogy tudjuk, mit fogunk fejleszteni, a következő dolog, amit meg kell tennünk, egy Maven-projekt létrehozása. Ban,-ben pom.xml meghatározzuk a groupId, artefactId és változat bővítményünk:

 4.0.0 com.baeldung counter-maven-plugin maven-plugin 0.0.1-SNAPSHOT counter-maven-plugin Maven Mojo //maven.apache.org 1.8 1.8 

Figyelje meg, hogy a csomagolást beállítottuk maven-plugin.

Ebben az esetben manuálisan hoztuk létre a projektet, de a maven-archetípus-mojo:

mvn archetípus: generál -DgroupId = com.baeldung -DartifactId = counter-maven-plugin -Dversion = 0.0.1-SNAPSHOT -DarchetypeGroupId = org.apache.maven.archetypes -DarchetypeArtifactId = maven-archetype-mojo

Ennek során frissítenünk kell a függőségek alapértelmezett verzióit a legújabbak használatához.

3. Mojo létrehozása

Itt az ideje, hogy elkészítsük az első mojónkat. A Mojo egy Java osztály, amely egy olyan célt képvisel, amelyet a beépülő modulunk végrehajtani fog. A beépülő modul egy vagy több mojót tartalmaz.

A mojo felelős lesz a projekt függőségeinek számolásáért.

3.1. Függőségek hozzáadása

A mojo létrehozása előtt hozzá kell adnunk néhány függőséget a sajátunkhoz pom.xml:

  org.apache.maven maven-plugin-api 3.6.3 org.apache.maven.plugin-tools maven-plugin-annotations 3.6.0 biztosított org.apache.maven maven-project 2.2.1 

A maven-plugin-api függőség szükséges, és tartalmazza a szükséges osztályokat és interfészeket a mojo létrehozásához. A maven-plugin-annotations a függőség jól jön, ha az osztályainkban annotációkat használunk. A maven-project A függőség lehetővé teszi, hogy hozzáférjünk a projekthez tartozó információkhoz, ahol a beépülő modult is tartalmazzuk.

3.2. A Mojo osztály létrehozása

Most készen állunk a mojo létrehozására!

Egy mojo-nak végre kell hajtania a Mojo felület. Esetünkben meghosszabbítjuk AbstractMojo így csak a végrehajtani módszer:

@Mojo (név = "dependency-counter", defaultPhase = LifecyclePhase.COMPILE) nyilvános osztály DependencyCounterMojo kiterjeszti az AbstractMojo-t {// ...}

Ahogy látjuk, függőség-számláló a cél neve. Másrészt csatoltuk a összeállítani szakasz alapértelmezés szerint, így nem kell feltétlenül megadnunk egy fázist a cél használatakor.

A projektinformációkhoz való hozzáféréshez hozzá kell adnunk a MavenProject paraméterként:

@Parameter (defaultValue = "$ {project}", kötelező = true, readonly = true) MavenProject projekt;

Ezt az objektumot Maven fogja injektálni a kontextus létrehozásakor.

Ezen a ponton képesek vagyunk végrehajtani az execute metódust és megszámolni a projekt függőségeinek számát:

public void execute () dobja a MojoExecutionException, MojoFailureException {List dependencies = project.getDependencies (); hosszú numDependencies = függőségek.stream (). count (); getLog (). info ("Függőségek száma:" + numDependencies); }

A getLog () módszer hozzáférést biztosít a Maven naplóhoz. A AbstractMojo már kezeli annak életciklusát.

3.3. Paraméterek hozzáadása

A korábban hozzáadott paraméter csak olvasható, és a felhasználó nem konfigurálhatja. Ezenkívül Maven injekciózta, így mondhatnánk, hogy különleges.

Ebben a szakaszban hozzáadunk egy paramétert, ahol a felhasználók megadhatják a megszámolni kívánt függőségek körét.

Ezért hozzunk létre egy hatálya paraméter a mojo-ban:

@Parameter (tulajdonság = "hatókör") Karakterlánc hatóköre;

Csak a ingatlan tulajdonság. Lehetővé teszi számunkra, hogy ezt a tulajdonságot a parancssoron vagy a segítségével állítsuk be pom ingatlan. A többi attribútum esetében jól állunk az alapértelmezett értékekkel.

Most módosítani fogjuk végrehajtani módszer a paraméter használatára és a függőségek szűrésére a számlálás során:

public void execute () dobja a MojoExecutionException, MojoFailureException List függőségeket = project.getDependencies (); hosszú numDependencies = dependencies.stream () .filter (d -> (hatókör == null 

A fejlettebb típusú paramétereket a hivatalos dokumentáció ismerteti.

4. A beépülő modul tesztelése

Befejeztük a bővítmény fejlesztését. Próbáljuk ki, hogy működik-e!

Először is telepítenünk kell a bővítményt a helyi adattárunkba:

mvn tiszta telepítés

A következő szakaszokban először látni fogjuk, hogyan futtassuk a plugint a parancssorból. Ezután kitérünk arra is, hogyan lehet felhasználni egy Maven projektben.

4.1. Bővítményünk végrehajtása

A plugin célját a parancssorban futtathatjuk, ha megadja annak teljes minősítését:

mvn groupId: artifactId: verzió: cél

Esetünkben így néz ki:

mvn com.baeldung: counter-maven-plugin: 0.0.1-SNAPSHOT: dependency-counter

Azonban, ha betartottuk az oktatóanyag elején említett plugin elnevezési megállapodást, Maven feloldja a pluginunk előtagját és lerövidíthetjük a parancsot:

mvn számláló: függőség-számláló

Vegye figyelembe, hogy ez a parancs a plugin legújabb verzióját használja. Ne feledje továbbá, hogy hozzá kell adnunk a sajátjainkat groupId hoz pluginGroups a mi settings.xml tehát Maven ebben a csoportban is keres:

 com.baeldung 

Ha ellenőrizzük a parancs kimenetét, láthatjuk, hogy a plugin megszámolta a függőségek számát a pom.xml bővítményünk:

[INFO] Projektek keresése ... [INFO] [INFO] ----------------------------------- [INFO] Maven Mojo 0.0.1-SNAPSHOT [Counter-Maven-plugin] építése [INFO] ---------------------------- [maven- plugin] ---------------------------- [INFO] [INFO] --- counter-maven-plugin: 0.0.1-SNAPSHOT : dependency-counter (alapértelmezett-cli) @ counter-maven-plugin --- [INFO] Függőségek száma: 3 [INFO] --------------------- -------------------------------------------------- - [INFO] SIKER ÉPÍTÉSE [INFO] ----------------------------------------- ------------------------------- [INFO] Teljes idő: 0,529 s [INFO] Befejezés dátuma: 2019-11-30T20 : 43: 41 + 01: 00 [INFO] --------------------------------------- ---------------------------------

Beállíthatjuk a hatálya paraméter a parancssori tulajdonságokon keresztül:

mvn számláló: dependency-counter -Dscope = teszt

Figyeljük meg, hogy a hatálya név az, amelyet a ingatlan paraméterünk attribútuma a mojo-ban.

4.2. A beépülő modulunk használata egy projektben

Teszteljük most a bővítményünket egy projekt használatával!

Egy nagyon egyszerű Maven-projektet fogunk létrehozni, néhány függőséggel, amelyeket a beépülő modul számolni fog:

 4.0.0 com.baeldung example pom 0.0.1-SNAPSHOT org.apache.commons commons-lang3 3.9 junit junit 4.12 test 

Utolsó dolog hozzáadni a bővítményünket a buildhez. Kifejezetten meg kell határoznunk, hogy a függőség-számláló cél:

   com.baeldung counter-maven-plugin 0.0.1-SNAPSHOT függőség-számláló teszt 

Figyelje meg, hogy megadtuk a hatálya paraméter a konfiguráció csomópont. Ezenkívül nem adtunk meg egyetlen fázist sem, mert a mojo-junk a összeállítani fázis alapértelmezés szerint.

Most csak futtatnunk kell a összeállítani szakasz a plugin végrehajtásához:

mvn tiszta fordítás

A bővítményünk kinyomtatja a számot teszt függőségek:

[INFO] Projektek keresése ... [INFO] [INFO] ----------------------------------- ------------- [INFO] Építési példa 0.0.1-SNAPSHOT [INFO] ------------------------ -------- [pom] --------------------------------- [INFO] [INFO] --- maven-clean-plugin: 2.5: tiszta (alapértelmezett-tiszta) @ példa --- [INFO] [INFO] --- counter-maven-plugin: 0.0.1-SNAPSHOT: dependency-counter (alapértelmezett) @ példa --- [INFO] Függőségek száma: 1 [INFO] ----------------------------------- ------------------------------------- [INFO] SIKER ÉPÍTÉSE [INFO] ----- -------------------------------------------------- ----------------- [INFO] Teljes idő: 0.627 s [INFO] Befejezés dátuma: 2019-11-25T18: 57: 22 + 01: 00 [INFO] --- -------------------------------------------------- -------------------

Ebben az oktatóanyagban nem foglalkozunk azzal, hogy miként írhatunk egységet vagy integrációs teszteket a bővítményünkhöz, de a Maven néhány mechanizmust biztosít ennek elvégzéséhez.

5. Dokumentáció hozzáadása

Amikor létrehozunk egy Maven beépülő modult, fontos a dokumentumok előállítása, hogy másoknak is könnyebb legyen használni őket.

Röviden kitérünk arra, hogyan lehet ezt a dokumentációt előállítani maven-plugin-plugin.

maven-plugin-plugin már szerepel a projektben, de frissíteni fogjuk a legújabb verzió használatára.

Emellett ugyanezt tesszük maven-site-plugin:

    org.apache.maven.plugins maven-plugin-plugin 3.6.0 org.apache.maven.plugins maven-site-plugin 3.8.2 

Ezután meg kell győződnünk arról, hogy felvettük-e javadoc a miénknek Mojo és adjon hozzá néhány metaadatot a pom.xml a plugin:

 Baeldung //www.baeldung.com/ 

Ezt követően hozzá kell adnunk egy jelentési szakaszt a pom.xml:

   org.apache.maven.plugins maven-plugin-plugin jelentés 

Végül elkészítjük a dokumentációt a maven site paranccsal:

mvn site

A célmappa belsejében találhatunk egy webhely könyvtárat a létrehozott HTML fájlokkal. A plugin-info.html a plugin dokumentációját tartalmazza:

További lehetőségek a dokumentációnkhoz a Maven plugin dokumentációs útmutatójában találhatók.

6. Következtetés

Ebben az oktatóanyagban bemutattuk, hogyan hozhatunk létre Maven plugint. Először egy egyszerű beépülő modult valósítottunk meg, amely segített egy tipikus Maven plugin projekt felépítésében. Ezután áttekintettük azokat az eszközöket, amelyeket a Maven a beépülő modulok fejlesztésében nyújt.

Egyszerűbbé tettük a dolgok egyértelműbbé tételét, ugyanakkor hasznos linkeket is közöltünk a szükséges információkkal arról, hogyan hozhat létre egy hatékonyabb bővítményt.

Mint mindig, a példák teljes forráskódja elérhető a GitHubon.