1.1 Liste over plugins til at bygge i Maven
Samlingen i Maven kan konfigureres meget fleksibelt. Maven-udviklere har specielt lavet snesevis af plugins, ved hjælp af hvilke du meget fleksibelt kan konfigurere forskellige builds. De mest populære af dem er vist i tabellen nedenfor:
plugin | Beskrivelse | |
---|---|---|
1 | maven-compiler-plugin | Styrer Java-kompilering |
2 | maven-ressources-plugin | Styrer inklusion af ressourcer i en samling |
3 | maven source plugin | Styrer om kildekoden er inkluderet i en samling |
4 | maven-afhængighed-plugin | Styrer processen med at kopiere afhængighedsbiblioteker |
5 | maven-jar-plugin | Plugin til oprettelse af den endelige jar-fil |
6 | maven war plugin | Plugin til oprettelse af den endelige krigsfil |
7 | maven-surefire-plugin | Styrer testkørsler |
8 | buildnumber-maven-plugin | Genererer et build-nummer |
Hvert plugin er interessant på sin egen måde, men vi bliver nødt til at analysere dem alle. Lad os starte med det vigtigste - kompileringsstyringsplugin'et.
1.2 Kompileringsplugin maven-compiler-plugin
Det mest populære plugin, der giver dig mulighed for at kontrollere versionen af compileren og bruges i næsten alle projekter, er maven-compiler-plugin
. Det har standardindstillinger, men i næsten alle projekter skal de indstilles igen.
I den enkleste version, i plug-in'et, skal du angive versionen af Java-kildekoden og versionen af Java-maskinen, under hvilken samlingen udføres:
<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>
I eksemplet ovenfor satte vi tre Java-kompilerindstillinger: source
, target
og encoding
.
Parameteren source
giver os mulighed for at indstille Java-versionen for vores kilder. Parameteren target
er den version af Java-maskinen, som du vil kompilere klasserne under. Hvis der ikke er angivet nogen kode eller Java-maskineversion, er standarden 1.3
Endelig giver parameteren encoding
dig mulighed for at angive kodningen af Java-filer. Vi angav UTF-8
. Nu er næsten alle kilder gemt i UTF-8
. Men hvis denne parameter ikke er angivet, vil den aktuelle kodning af operativsystemet blive valgt. For Windows er dette kodningen Windows-1251
.
Der er også tilfælde, hvor byggecomputeren har flere versioner af Java installeret: at bygge forskellige moduler og/eller forskellige projekter. I dette tilfælde JAVA_HOME
kan kun stien til en af dem angives i variablen.
Derudover er der forskellige implementeringer af Java-maskinen: OpenJDK, OracleJDK, Amazon JDK. Og jo større projektet er, jo mere kompleks er dets struktur. Men du kan udtrykkeligt indstille stien til javac-kompileren for plugin'et ved hjælp af tagget
Pluginnet maven-compiler-plugin
har to mål:
compiler:compile
– kompilering af kilder, som standard forbundet med kompileringsfasencompiler:testCompile
– kompilering af test, som standard er det forbundet med test-kompileringsfasen.
Du kan også angive en liste over argumenter, der skal sendes til javac-kompileren på kommandolinjen:
<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 til oprettelse af jar-fil maven-jar-plugin
Hvis du vil bygge dit eget jar-bibliotek med Maven, skal du bruge maven-jar-plugin. Dette plugin gør en masse nyttige ting.
Et eksempel på sådan et plugin:
<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>
For det første kan den bruges til at angive, hvilke filer der skal ind i biblioteket, og hvilke der ikke vil. Ved hjælp af tags <include>
i sektionen <includes>
kan du angive en liste over mapper, hvis indhold skal tilføjes til biblioteket .
For det andet skal hver jar have et manifest ( MANIFEST.MF fil ). Selve plugin'et vil placere det på det rigtige sted i biblioteket, du skal blot angive, hvilken vej du skal tage det. Taget bruges til dette <manifestFile>
.
Endelig kan plugin'et generere et manifest på egen hånd. For at gøre dette skal du i stedet for et tag <manifestFile>
tilføje et tag <manifest>
og angive data for det fremtidige manifest i det. Eksempel:
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.codegym.MainApplication</mainClass>
</manifest>
</archive>
</configuration>
Tagget <addClasspath>
angiver, om der skal føjes til manifestet CLASSPATH
.
Tagget <classpathPrefix>
giver dig mulighed for at tilføje et præfiks (i eksemplet lib) før hver ressource. Angivelse af et præfiks i <classpathPrefix>
giver dig mulighed for at placere afhængigheder i en separat mappe.
Ja, du kan placere biblioteker i et andet bibliotek. Og der er mange overraskelser, der venter på dig, når du skal passere stien til egenskabsfilen et eller andet sted, som er i jar-biblioteket, som er i jar-biblioteket.
Endelig peger tagget <mainClass>
på den primære eksekverbare klasse. "Hvad er den vigtigste eksekverbare klasse? ", - du spørger. Og sagen er, at en Java-maskine kan køre et program, der ikke kun er specificeret af en Java-klasse, men også af en jar-fil. Og det er til denne sag, at hovedstartklassen er nødvendig.
1.4 Byg nummergenereringsplugin buildnumber-maven-plugin
Meget ofte indeholder jar-biblioteker og krigsfiler information med navnet på projektet og dets version samt versionen af samlingen. Dette er ikke kun nyttigt til styring af afhængigheder, men det forenkler også test: det er tydeligt i hvilken version af biblioteket fejlen er rettet, og i hvilken den er tilføjet.
Oftest løses denne opgave sådan - de opretter en speciel fil application.properties
, der indeholder alle de nødvendige oplysninger og inkluderer den i forsamlingen. Du kan også konfigurere build-scriptet, så dataene fra denne fil migrerer til MANIFEST.MF
osv.
Men det mest interessante er, at Maven har et specielt plugin, der kan generere sådan en application.properties-fil. For at gøre dette skal du oprette en sådan fil og udfylde den med specielle dataskabeloner. Eksempel:
# application.properties
app.name=${pom.name}
app.version=${pom.version}
app.build=${buildNumber}
Værdierne for alle tre parametre vil blive erstattet på byggestadiet.
Parametre pom.name
og pom.version
vil blive taget direkte fra pom.xml
. Og for at generere et unikt build-nummer i Maven, er der et særligt plugin - buildnumber-maven-plugin
. Se eksempel nedenfor:
<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>
I eksemplet ovenfor sker der tre vigtige ting. Først er selve plugin'et angivet til indstilling af assembly-versionen . For det andet er det specificeret, at det vil køre under valideringsfasen (den allerførste fase) og generere et buildnummer - ${buildNumber}
.
Og for det tredje er formatet på dette samlingsnummer angivet, som er limet sammen fra flere dele . Dette er versionen af projektet project.version
og det aktuelle tidspunkt givet af skabelonen. Skabelonformatet er specificeret af Java-klassen MessageFormat
.
GO TO FULL VERSION