2.1 plug-in maven-resources-plugin per copiare le risorse
Se stai costruendo un'applicazione web, avrai solo un sacco di risorse diverse al suo interno. Queste sono librerie jar, servlet jsp, file di impostazioni. E, naturalmente, questo è un mucchio di file statici come html
, css
, js
, oltre a varie immagini.
Per impostazione predefinita, durante la creazione di un progetto, Maven copierà semplicemente tutti i file dalla cartella src/main/resources
alla directory di destinazione. Se desideri apportare modifiche a questo comportamento, il plug-in ti aiuterà maven-resources-plugin
.
Codice di esempio per tale plugin:
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>
${basedir}/target/resources
</outputDirectory>
<resources>
<resource> instructions for copying a resource 1 </resource>
<resource> instructions for copying a resource 2 </resource>
<resource> instructions for copying a resource N </resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
Questo plugin verrà chiamato durante la fase di convalida. Utilizzando il tag, <outputDirectory>
puoi impostare la directory in cui il plug-in deve copiare le risorse specificate nel file <resources>
. Ed è qui che il plugin può dispiegarsi in tutta la sua forza.
2.2 Filtrare le risorse con il plugin maven-resources
Le risorse del plug-in possono essere specificate non solo sotto forma di file, ma immediatamente sotto forma di directory. Inoltre, è possibile aggiungere una maschera alla directory, che specifica quali file da essa verranno inclusi in questa risorsa.
Esempio:
<resource>
<directory>src/main/resources/images</directory>
<includes>
<include>**/*.png</include>
</includes>
</resource>
Due asterischi come maschera rappresentano un numero qualsiasi di directory . Nell'esempio precedente, tutti i file png contenuti nella directory src/main/resources/images
(e nelle sue sottodirectory) verranno presi come dati di risorsa.
Se si desidera escludere alcuni file, è possibile utilizzare l'estensione exclude
. Esempio:
<resource>
<directory>src/main/resources/images</directory>
<includes>
<include>**/*.png</include>
</includes>
<excludes>
<exclude>old/*.png</exclude>
</excludes>
</resource>
I tag vengono applicati in sequenza: in primo luogo, i file di inclusione specificati nei file di inclusione verranno aggiunti alla risorsa, quindi i file di esclusione verranno esclusi da questo elenco.
Ma non è tutto. Il plugin può guardare all'interno dei file (se sono di testo, ovviamente). E, ad esempio, aggiungi application.properties
la versione richiesta dell'assembly al file. Affinché il plugin elabori il contenuto del file, è necessario specificare il parametro <filtering>true</filtering>
.
Esempio:
<resource>
<directory>src/main/resources/properties</directory>
<filtering>true</filtering>
<includes>
<include>**/*. properties </include>
</includes>
</resource>
Maggiori dettagli su questo plugin sono disponibili al link: https://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html
2.3 plug-in di inclusione della fonte plug-in maven-source
Un altro plugin utile: maven-source-plugin
ti consente di includere il codice sorgente dei tuoi file java nell'assembly. Per quello?
Il fatto è che oltre alle applicazioni web, un numero molto elevato di librerie viene assemblato utilizzando Maven. Molti progetti Java seguono il concetto di open-source e sono distribuiti alla comunità Java con i propri sorgenti.
Perché hai bisogno di un plugin separato? Perché non puoi semplicemente copiare la fonte e basta?
Innanzitutto, in qualsiasi progetto complesso, le fonti possono essere archiviate in più posizioni.
In secondo luogo, viene spesso utilizzata la generazione di sorgenti basate su specifiche xml, anche tali sorgenti devono essere incluse nell'assembly.
E in terzo luogo, puoi decidere di non includere file particolarmente segreti nel tuo assembly.
Un esempio di utilizzo del plugin maven-source-plugin:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<id>attach-sources</id>
<phase>verify</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
2.4 plug-in per la copia della dipendenza del plug-in di dipendenza da maven
Potrebbe anche essere necessario copiare in modo intelligente le dipendenze (librerie) durante la creazione di un progetto. Per questo viene utilizzato un plug-in maven-dependency-plugin
.
Esempio:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<outputDirectory>
${project.build.directory}/lib/
</outputDirectory>
</configuration>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
</execution>
</executions>
</plugin>
In questo esempio, il comportamento predefinito del plug-in è scritto: copiare le librerie nel file ${project.build.directory}/lib
.
La sezione di esecuzione afferma che il plug-in verrà chiamato durante la fase di compilazione - pacchetto, obiettivo - dipendenze dalla copia.
In generale, questo plugin ha una serie di obiettivi abbastanza ampia, ecco i più popolari:
1 | dipendenza: analizzare | analisi delle dipendenze (usato, non utilizzato, specificato, non specificato) |
2 | dipendenza: analizzare-duplicare | identificare le dipendenze duplicate |
3 | dipendenza: risoluzione | risoluzione (definizione) di tutte le dipendenze |
4 | dipendenza: plugin di risoluzione | permesso (definizione) di tutti i plugin |
5 | dipendenza: albero | visualizzare l'albero delle dipendenze |
È inoltre possibile impostare parametri aggiuntivi nella sezione di configurazione:
1 | cartella di destinazione | Directory in cui verranno copiate le dipendenze |
2 | overWrite Releases | Flag per sovrascrivere le dipendenze durante la creazione di una versione |
3 | overWriteSnapshots | Flag per sovrascrivere le dipendenze non terminali che hanno SNAPSHOT |
4 | overWriteIfNewer | Contrassegna per sovrascrivere le librerie con le versioni più recenti |
Esempio:
<configuration>
<outputDirectory>
${project.build.directory}/lib/
</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
Per impostazione predefinita <overWriteReleases>
, ed <overWriteSnapshots>
è falso, per <overWriteIfNewer>
è vero.