1.1 A Mavenben építendő beépülő modulok listája
A Maven összeállítása nagyon rugalmasan konfigurálható. A Maven fejlesztői speciálisan több tucat plugint készítettek, amelyek segítségével nagyon rugalmasan konfigurálhatja a különféle buildeket. Ezek közül a legnépszerűbbek az alábbi táblázatban láthatók:
csatlakoztat | Leírás | |
---|---|---|
1 | maven-compiler-plugin | Kezeli a Java fordítást |
2 | maven-resources-plugin | Szabályozza az erőforrások összeállításba való bevonását |
3 | maven forrás plugin | Azt szabályozza, hogy a forráskód szerepeljen-e egy összeállításban |
4 | maven-dependency-plugin | Szabályozza a függőségi könyvtárak másolásának folyamatát |
5 | maven-jar-plugin | Beépülő modul a végleges jar fájl létrehozásához |
6 | maven war plugin | Beépülő modul az utolsó háborús fájl létrehozásához |
7 | maven-surefire-plugin | Kezeli a tesztfutásokat |
8 | buildnumber-maven-plugin | Építési számot generál |
Mindegyik bővítmény érdekes a maga módján, de mindegyiket elemeznünk kell. Kezdjük a fő dologgal - a fordításkezelő bővítménnyel.
1.2 Fordítási bővítmény maven-compiler-plugin
A legnépszerűbb plugin, amely lehetővé teszi a fordító verziójának vezérlését, és szinte minden projektben használatos, a maven-compiler-plugin
. Alapbeállításai vannak, de szinte minden projektben újra be kell őket állítani.
A legegyszerűbb verzióban a beépülő modulban meg kell adnia a Java forráskód verzióját és annak a Java gépnek a verzióját, amelyen az összeállítás történik:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.11</source>
<target>1.13</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
A fenti példában három Java-fordító beállítást adtunk meg: source
, target
és encoding
.
A paraméter source
lehetővé teszi, hogy beállítsuk forrásaink Java verzióját. A paraméter target
a Java gép azon verziója, amely alatt az osztályokat le szeretné fordítani. Ha nincs megadva kód vagy Java gépverzió, akkor az alapértelmezett 1.3
Végül a paraméter encoding
lehetővé teszi a Java fájlok kódolásának megadását. jeleztük UTF-8
. Mostanra szinte minden forrás a következőben van tárolva UTF-8
. De ha ez a paraméter nincs megadva, akkor az operációs rendszer aktuális kódolása kerül kiválasztásra. Windows esetén ez a kódolás Windows-1251
.
Vannak olyan esetek is, amikor a felépített számítógépen a Java több verziója is telepítve van: különböző modulok és/vagy projektek készítéséhez. Ebben az esetben JAVA_HOME
csak az egyik elérési útja adható meg a változóban.
Ezen kívül a Java gépnek különböző megvalósításai vannak: OpenJDK, OracleJDK, Amazon JDK. És minél nagyobb a projekt, annál bonyolultabb a felépítése. De a címke használatával kifejezetten beállíthatja a bővítmény javac fordítójának elérési útját
A bővítménynek maven-compiler-plugin
két célja van:
compiler:compile
– források összeállítása, alapértelmezés szerint a fordítási fázishoz társítvacompiler:testCompile
– tesztek összeállítása, alapértelmezés szerint a teszt-összeállítási fázishoz kapcsolódik.
A parancssorban megadhatja a javac fordítónak átadandó argumentumok listáját is:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<compilerArgs>
<arg>-verbose</arg>
<arg>-Xlint:all,-options,-path<arg>
</compilerArgs>
</configuration>
</plugin>
1.3 Plugin jar fájl létrehozásához maven-jar-plugin
Ha saját jar könyvtárat szeretne felépíteni a Maven segítségével, szüksége lesz a maven-jar-pluginre. Ez a bővítmény sok hasznos dolgot végez.
Példa egy ilyen bővítményre:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<includes>
<include>**/properties/*</include>
</includes>
<archive>
<manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>
</archive>
</configuration>
</plugin>
Először is megadhatja, hogy mely fájlok kerüljenek a könyvtárba, és melyek nem. <include>
A szakaszban található címkék segítségével <includes>
megadhatja azon könyvtárak listáját, amelyek tartalmát hozzá kell adni a könyvtárhoz .
Másodszor, minden jarnak rendelkeznie kell egy manifeszttel ( MANIFEST.MF fájl ). Maga a beépülő modul a megfelelő helyre teszi a könyvtárban, csak meg kell adni, hogy melyik útvonalon haladjon tovább. A címkét erre használják <manifestFile>
.
Végül a beépülő modul önmagában is létrehozhat egy manifestet. Ehhez a címke helyett <manifestFile>
egy címkét kell hozzáadnia , <manifest>
és meg kell adnia benne a jövőbeli jegyzék adatait. Példa:
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.codegym.MainApplication</mainClass>
</manifest>
</archive>
</configuration>
A címke <addClasspath>
határozza meg, hogy hozzá kell-e adni a jegyzékhez CLASSPATH
.
A címke <classpathPrefix>
lehetővé teszi egy előtag hozzáadását (a lib példában) minden erőforrás elé. Az előtag megadása <classpathPrefix>
lehetővé teszi a függőségek külön mappába helyezését.
Igen, elhelyezhet könyvtárakat egy másik könyvtáron belül. És sok meglepetés vár rád, amikor valahol át kell adnod a tulajdonságfájl elérési útját, ami a jar könyvtárban van, ami a jar könyvtárban van.
Végül a címke <mainClass>
a fő végrehajtható osztályra mutat. „Mi a fő végrehajtható osztály? ", - kérdezed. És a helyzet az, hogy egy Java gép olyan programot futtathat, amelyet nem csak egy Java osztály, hanem egy jar fájl is megad. És erre az esetre van szükség a fő induló osztályra.
1.4 Build number generation plugin buildnumber-maven-plugin
A jar könyvtárak és a háborús fájlok nagyon gyakran tartalmaznak információkat a projekt nevével és verziójával, valamint az összeállítás verziójával. Ez nem csak a függőségek kezeléséhez hasznos, de a tesztelést is leegyszerűsíti: egyértelmű, hogy a könyvtár melyik verziójában javították ki a hibát, és melyikhez adták hozzá.
Leggyakrabban ezt a feladatot így oldják meg - létrehoznak egy speciális fájlt, application.properties
amely tartalmazza az összes szükséges információt, és belefoglalja az összeállításba. A build szkriptet úgy is beállíthatja, hogy az ebből a fájlból származó adatok áttelepüljenek a MANIFEST.MF
stb.
De ami a legérdekesebb, az az, hogy a Mavennek van egy speciális bővítménye, amely képes létrehozni egy ilyen application.properties fájlt. Ehhez létre kell hoznia egy ilyen fájlt, és speciális adatsablonokkal kell kitöltenie. Példa:
# application.properties
app.name=${pom.name}
app.version=${pom.version}
app.build=${buildNumber}
Mindhárom paraméter értéke az építési szakaszban lecserélődik.
pom.name
A és paraméterek pom.version
közvetlenül innen származnak pom.xml
. Egyedi buildszám generálásához pedig a Mavenben van egy speciális plugin - buildnumber-maven-plugin
. Lásd az alábbi példát:
<packaging>war</packaging>
<version>1.0</version>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
<configuration>
<revisionOnScmFailure>true</revisionOnScmFailure>
<format>{0}-{1,date,yyyyMMdd}</format>
<items>
<item>${project.version}</item>
<item>timestamp</item>
</items>
</configuration>
</plugin>
</plugins>
A fenti példában három fontos dolog történik. Először is maga a bővítmény van megadva az összeállítás verziójának beállításához . Másodszor meg van adva, hogy az érvényesítési fázisban (a legelső fázisban) futni fog, és létrehoz egy buildszámot - ${buildNumber}
.
Harmadszor pedig fel van tüntetve ennek az összeállítási számnak a formátuma, amely több részből van összeragasztva . Ez a projekt verziója project.version
és a sablon által megadott aktuális idő. A sablon formátumát a Java osztály határozza meg MessageFormat
.
GO TO FULL VERSION