1.1 Elenco dei plugin da costruire in Maven
L'assemblaggio in Maven può essere configurato in modo molto flessibile. Gli sviluppatori Maven hanno creato appositamente dozzine di plug-in, utilizzando i quali è possibile configurare in modo molto flessibile varie build. I più popolari sono mostrati nella tabella seguente:
collegare | Descrizione | |
---|---|---|
1 | plug-in-compilatore maven | Gestisce la compilazione Java |
2 | plug-in-risorse-di-maven | Controlla l'inclusione delle risorse in un assembly |
3 | plug-in sorgente maven | Controlla se il codice sorgente è incluso in un assembly |
4 | plug-in-dipendenza-maven | Controlla il processo di copia delle librerie di dipendenze |
5 | plug-in-jar-maven | Plugin per la creazione del file jar finale |
6 | plug-in maven war | Plugin per la creazione del file war finale |
7 | Maven-surefire-plugin | Gestisce le esecuzioni di test |
8 | buildnumber-esperto-plugin | Genera un numero di build |
Ogni plugin è interessante a modo suo, ma dovremo analizzarli tutti. Cominciamo con la cosa principale: il plug-in di gestione della compilazione.
1.2 Plugin di compilazione maven-compiler-plugin
Il plugin più popolare che permette di controllare la versione del compilatore ed è usato in quasi tutti i progetti è il maven-compiler-plugin
. Ha impostazioni predefinite, ma in quasi tutti i progetti devono essere reimpostate.
Nella versione più semplice, nel plug-in, è necessario specificare la versione del codice sorgente Java e la versione della macchina Java con cui viene eseguito l'assembly:
<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>
Nell'esempio precedente, impostiamo tre opzioni del compilatore Java: source
, target
e encoding
.
Il parametro source
ci consente di impostare la versione Java per le nostre fonti. Il parametro target
è la versione della macchina Java in cui si desidera compilare le classi. Se non viene specificato alcun codice o versione della macchina Java, il valore predefinito è 1.3
Infine, il parametro encoding
consente di specificare la codifica dei file Java. Abbiamo indicato UTF-8
. Ora quasi tutte le fonti sono archiviate in file UTF-8
. Ma se questo parametro non è specificato, verrà selezionata la codifica corrente del sistema operativo. Per Windows, questa è la codifica Windows-1251
.
Ci sono anche casi in cui il computer di compilazione ha diverse versioni di Java installate: per costruire moduli diversi e/o progetti diversi. In questo caso, JAVA_HOME
nella variabile può essere specificato solo il percorso di uno di essi.
Inoltre, esistono diverse implementazioni della macchina Java: OpenJDK, OracleJDK, Amazon JDK. E più grande è il progetto, più complessa è la sua struttura. Ma puoi impostare in modo esplicito il percorso del compilatore javac per il plug-in utilizzando il tag
Il plugin maven-compiler-plugin
ha due obiettivi:
compiler:compile
– compilazione dei sorgenti, associati di default alla fase di compilazionecompiler:testCompile
– compilazione dei test, di default è associato alla fase di compilazione dei test.
Puoi anche specificare un elenco di argomenti da passare al compilatore javac sulla riga di comando:
<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 per la creazione di file jar maven-jar-plugin
Se vuoi creare la tua libreria jar con Maven, avrai bisogno del plug-in maven-jar. Questo plugin fa molte cose utili.
Un esempio di tale 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>
Innanzitutto, può essere utilizzato per specificare quali file andranno nella libreria e quali no. Utilizzando i tag <include>
nella sezione, <includes>
puoi specificare un elenco di directory il cui contenuto deve essere aggiunto alla libreria .
In secondo luogo, ogni jar deve avere un manifest ( file MANIFEST.MF ). Il plugin stesso lo metterà nel posto giusto nella libreria, devi solo specificare quale percorso prenderlo. Il tag viene utilizzato per questo <manifestFile>
.
Infine, il plug-in può generare un manifest da solo. Per fare ciò, invece di un tag, <manifestFile>
è necessario aggiungere un tag <manifest>
e specificare i dati per il futuro manifest in esso. Esempio:
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.codegym.MainApplication</mainClass>
</manifest>
</archive>
</configuration>
Il tag <addClasspath>
specifica se aggiungere al file manifest CLASSPATH
.
Il tag <classpathPrefix>
consente di aggiungere un prefisso (nell'esempio lib) prima di ogni risorsa. La specifica di un prefisso in <classpathPrefix>
consente di posizionare le dipendenze in una cartella separata.
Sì, puoi posizionare le librerie all'interno di un'altra libreria. E ci sono molte sorprese che ti aspettano quando devi passare il percorso al file delle proprietà da qualche parte, che è nella libreria jar, che è nella libreria jar.
Infine, il tag <mainClass>
punta alla classe eseguibile principale. “Qual è la classe eseguibile principale? ", - tu chiedi. E il fatto è che una macchina Java può eseguire un programma specificato non solo da una classe Java, ma anche da un file jar. Ed è per questo caso che serve la classe di partenza principale.
1.4 Plugin per la generazione del numero di build buildnumber-maven-plugin
Molto spesso, le librerie jar e i file war includono informazioni con il nome del progetto e la sua versione, oltre alla versione dell'assembly. Non solo è utile per gestire le dipendenze, ma semplifica anche il test: è chiaro in quale versione della libreria l'errore è stato corretto e in quale è stato aggiunto.
Molto spesso, questa attività viene risolta in questo modo: creano un file speciale application.properties
che contiene tutte le informazioni necessarie e le includono nell'assieme. Puoi anche configurare lo script di compilazione in modo che i dati da questo file vengano migrati a MANIFEST.MF
ecc.
Ma la cosa più interessante è che Maven ha un plugin speciale che può generare un tale file application.properties. Per fare ciò, è necessario creare un tale file e riempirlo con modelli di dati speciali. Esempio:
# application.properties
app.name=${pom.name}
app.version=${pom.version}
app.build=${buildNumber}
I valori di tutti e tre i parametri verranno sostituiti in fase di compilazione.
I parametri pom.name
e pom.version
saranno presi direttamente da pom.xml
. E per generare un numero di build univoco in Maven, esiste un plug-in speciale: buildnumber-maven-plugin
. Vedi l'esempio qui sotto:
<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>
Nell'esempio sopra, accadono tre cose importanti. Innanzitutto, il plug-in stesso è specificato per l'impostazione della versione dell'assembly . In secondo luogo, viene specificato che verrà eseguito durante la fase di convalida (la primissima fase) e genererà un numero di build - ${buildNumber}
.
E in terzo luogo, viene indicato il formato di questo numero di assieme, che è incollato insieme da più parti . Questa è la versione del progetto project.version
e l'ora corrente fornita dal modello. Il formato del modello è specificato dalla classe Java MessageFormat
.
GO TO FULL VERSION