Je partage ici la solution, avec quelques explications, si toutefois ça peut servir à d'autres.
Point de départ
Avec le plugin maven-assembly-plugin, je sais générer un ZIP contenant des dépendances (ou des fichiers).Il me faut un fichier pom.xml contenant le plugin :
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<plugin> | |
<artifactId>maven-assembly-plugin</artifactId> | |
<version>2.4</version> | |
<executions> | |
<execution> | |
<id>make-final</id> | |
<configuration> | |
<descriptors> | |
<descriptor>src/main/assemblies/assembly-final-classic.xml</descriptor> | |
</descriptors> | |
</configuration> | |
<phase>package</phase> | |
<goals> | |
<goal>single</goal> | |
</goals> | |
</execution> | |
</executions> | |
</plugin> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<assembly | |
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" | |
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"> | |
<id>final</id> | |
<baseDirectory>/</baseDirectory> | |
<formats> | |
<format>zip</format> | |
</formats> | |
<dependencySets> | |
<dependencySet> | |
<outputDirectory>libs</outputDirectory> | |
</dependencySet> | |
</dependencySets> | |
<fileSets> | |
<fileSet> | |
<directory>src/main/resources/zip-final</directory> | |
<outputDirectory>/</outputDirectory> | |
</fileSet> | |
</fileSets> | |
</assembly> |
Solution avec module
Une première solution, déjà éprouvée pourrait consister à créer un module pour générer le premier ZIP, et mettre cet artefact comme dépendance. Le ZIP final contiendrait alors bien le premier ZIP issu du module.Pour différentes raisons, je ne pouvais pas trop m'orienter vers cette solution, il me fallait trouver une solution pour faire cette double génération au sein du même projet/module Maven.
Générer le premier ZIP
La solution consiste :- à ajouter une section <execution>
- à l'attacher à la phase "prepare-package" pour être sûr qu'elle soit exécutée avant l'autre <execution>
- à créer un autre assembly.xml pour décrire le contenu de ce premier ZIP
- à ne pas "attacher" le fichier généré à l'artefact courant Maven (<attach>false</attach>), car on ne peut attacher qu'un seul fichier généré par artefact
- à spécifier un répertoire de destination spécifique pour faciliter la suite (<outputDirectory>${project.
build.directory}/inter</ )outputDirectory>
Le fichier pom.xml final est alors de la forme :
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | |
<modelVersion>4.0.0</modelVersion> | |
<groupId>xno</groupId> | |
<artifactId>test</artifactId> | |
<version>0.0.1-SNAPSHOT</version> | |
<packaging>pom</packaging> | |
<build> | |
<plugins> | |
<!-- Generation des ZIPs en sortie (ZIP "inter" dans ZIP "final") --> | |
<plugin> | |
<artifactId>maven-assembly-plugin</artifactId> | |
<version>2.4</version> | |
<executions> | |
<execution> | |
<id>make-inter</id> | |
<configuration> | |
<descriptors> | |
<descriptor>src/main/assemblies/assembly-inter.xml</descriptor> | |
</descriptors> | |
<attach>false</attach> | |
<outputDirectory>${project.build.directory}/inter</outputDirectory> | |
</configuration> | |
<phase>prepare-package</phase> | |
<goals> | |
<goal>single</goal> | |
</goals> | |
</execution> | |
<execution> | |
<id>make-final</id> | |
<configuration> | |
<descriptors> | |
<descriptor>src/main/assemblies/assembly-final.xml</descriptor> | |
</descriptors> | |
</configuration> | |
<phase>package</phase> | |
<goals> | |
<goal>single</goal> | |
</goals> | |
</execution> | |
</executions> | |
</plugin> | |
</plugins> | |
</build> | |
</project> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<assembly | |
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" | |
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"> | |
<id>inter</id> | |
<baseDirectory>/</baseDirectory> | |
<formats> | |
<format>zip</format> | |
</formats> | |
<fileSets> | |
<fileSet> | |
<directory>src/main/resources/zip-inter</directory> | |
<outputDirectory>/</outputDirectory> | |
</fileSet> | |
</fileSets> | |
</assembly> |
Intégrer ce ZIP dans le ZIP final
Il faut maintenant compléter le fichier "assembly-final.xml" pour y ajouter le (ou les) fichier(s) précédemment générés dans "${project.build.directory}/inter" :
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<assembly | |
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" | |
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"> | |
<id>final</id> | |
<baseDirectory>/</baseDirectory> | |
<formats> | |
<format>zip</format> | |
</formats> | |
<dependencySets> | |
<dependencySet> | |
<outputDirectory>libs</outputDirectory> | |
</dependencySet> | |
</dependencySets> | |
<fileSets> | |
<fileSet> | |
<directory>src/main/resources/zip-final</directory> | |
<outputDirectory>/</outputDirectory> | |
</fileSet> | |
<fileSet> | |
<directory>${project.build.directory}/inter</directory> | |
<outputDirectory>/</outputDirectory> | |
</fileSet> | |
</fileSets> | |
</assembly> |
Tous les extraits ci-dessus sont là : https://gist.github.com/4164987
Aucun commentaire:
Enregistrer un commentaire