2.1 maven-resources-plugin copier le plugin de ressources
Si vous créez une application Web, vous n'aurez qu'un tas de ressources différentes. Ce sont des bibliothèques jar, des servlets jsp, des fichiers de paramètres. Et bien sûr, il s'agit d'un tas de fichiers statiques comme html
, css
, js
, ainsi que diverses images.
Par défaut, lors de la construction d'un projet, Maven copiera simplement tous vos fichiers du dossier src/main/resources
vers le répertoire cible. Si vous souhaitez apporter des modifications à ce comportement, le plugin vous aidera maven-resources-plugin
.
Exemple de code pour un tel 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>
Ce plugin sera appelé lors de la phase de validation. À l'aide de la balise, <outputDirectory>
vous pouvez définir le répertoire dans lequel le plug-in doit copier les ressources spécifiées dans le fichier <resources>
. Et c'est là que le plugin peut se déployer dans toute sa puissance.
2.2 Filtrage des ressources avec le plugin maven-resources
Les ressources de plugin peuvent être spécifiées non seulement sous forme de fichiers, mais immédiatement sous forme de répertoires. De plus, un masque peut être ajouté au répertoire, qui spécifie quels fichiers de celui-ci seront inclus dans cette ressource.
Exemple:
<resource>
<directory>src/main/resources/images</directory>
<includes>
<include>**/*.png</include>
</includes>
</resource>
Deux astérisques comme masque représentent n'importe quel nombre de répertoires . Dans l'exemple ci-dessus, tous les fichiers png contenus dans le répertoire src/main/resources/images
(et ses sous-répertoires) seront considérés comme des données de ressource.
Si vous souhaitez exclure certains fichiers, vous pouvez utiliser le exclude
. Exemple:
<resource>
<directory>src/main/resources/images</directory>
<includes>
<include>**/*.png</include>
</includes>
<excludes>
<exclude>old/*.png</exclude>
</excludes>
</resource>
Les balises sont appliquées séquentiellement : d'abord, les fichiers d'inclusion spécifiés dans les fichiers d'inclusion seront ajoutés à la ressource, puis les fichiers d'exclusion seront exclus de cette liste.
Mais ce n'est pas tout. Le plugin peut regarder à l'intérieur des fichiers (s'ils sont du texte, bien sûr). Et, par exemple, ajoutez application.properties
la version requise de l'assembly au fichier. Pour que le plugin traite le contenu du fichier, vous devez spécifier le paramètre <filtering>true</filtering>
.
Exemple:
<resource>
<directory>src/main/resources/properties</directory>
<filtering>true</filtering>
<includes>
<include>**/*. properties </include>
</includes>
</resource>
Plus de détails sur ce plugin peuvent être trouvés sur le lien : https://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html
2.3 greffon d'inclusion de sources maven-source-plugin
Un autre plugin utile - maven-source-plugin
vous permet d'inclure le code source de vos fichiers java dans l'assembly. Pour quelle raison?
Le fait est qu'en plus des applications Web, un très grand nombre de bibliothèques sont assemblées à l'aide de Maven. De nombreux projets Java suivent le concept d'open-source et sont distribués à la communauté Java avec leurs propres sources.
Pourquoi avez-vous besoin d'un plugin séparé ? Pourquoi ne pouvez-vous pas simplement copier la source et c'est tout?
Premièrement, dans tout projet complexe, les sources peuvent être stockées à plusieurs endroits.
Deuxièmement, la génération de sources basées sur des spécifications xml est souvent utilisée, ces sources doivent également être incluses dans l'assemblage.
Et troisièmement, vous pouvez décider de ne pas inclure de fichiers particulièrement secrets dans votre assemblage.
Un exemple d'utilisation du 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 plugin de copie de dépendance maven-dependency-plugin
Vous devrez peut-être également copier intelligemment les dépendances (bibliothèques) lors de la construction d'un projet. Un plugin est utilisé pour cela maven-dependency-plugin
.
Exemple:
<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>
Dans cet exemple, le comportement par défaut du plugin est écrit - copier les bibliothèques dans le fichier ${project.build.directory}/lib
.
La section d'exécution indique que le plugin sera appelé pendant la phase de construction - package, goal - copy-dependences.
En général, ce plugin a un ensemble d'objectifs assez large, voici les plus populaires :
1 | dépendance:analyser | analyse de dépendance (utilisé, inutilisé, spécifié, non spécifié) |
2 | dépendance:analyser-dupliquer | identification des dépendances en double |
3 | dépendance:résolution | résolution (définition) de toutes les dépendances |
4 | dépendance : plugin de résolution | autorisation (définition) de tous les plugins |
5 | dépendance:arborescence | affichage de l'arborescence des dépendances |
Vous pouvez également définir des paramètres supplémentaires dans la section de configuration :
1 | répertoire de sortie | Répertoire où les dépendances seront copiées |
2 | overWriteReleases | Indicateur pour écraser les dépendances lors de la création d'une version |
3 | écraser les instantanés | Drapeau pour écraser les dépendances non terminales qui ont SNAPSHOT |
4 | écraserSiNouveau | Drapeau pour écraser les bibliothèques avec des versions plus récentes |
Exemple:
<configuration>
<outputDirectory>
${project.build.directory}/lib/
</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
Par défaut <overWriteReleases>
, et <overWriteSnapshots>
est faux, car <overWriteIfNewer>
est vrai.
GO TO FULL VERSION