À l'aide de maven pour construire de multiples ressources assemblées qui sont très similaires
Je vais avoir un problème avec ce très redondant de configuration de maven.
L'application que je suis en train de travailler sur parfois se construit pour les environnements qui ont besoin d'autres ressources. L'actuel façon dont les ressources sont préparés pour le déploiement, c'est qu'ils sont ajoutés à un seul .fichier zip. La construction de maître déploie alors la zippé ressources sur le serveur. Pour certains environnements, d'autres versions de certaines des ressources doivent être utilisées. La structure des dossiers dans le projet ressemble à ceci:
src/main/resources - resource1 - resource2 - resource2 ENV1/ -resource1 (spécifique à l'environnement) ENV2/ -resource1 (spécifique à l'environnement) -resource3 (spécifique à l'environnement)
Pour la plupart des environnements, la ressource fichier zip doit contenir les fichiers resource1
, resource2
, resource3
. Pour ENV1
, le fichier zip doit contenir ENV1/resource1
, resource2
, resource3
. Pour ENV3
, le fichier zip besoins ENV2/resource1
, resource2
, ENV2/resource3
.
Je suis actuellement en train de faire cela avec une assemblée descripteur pour chaque environnement, et séparé de l'exécution dans mon POM fichier:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>zip-normal-resources</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptor>assembly-descriptor.xml</descriptor>
</configuration>
</execution>
<execution>
<id>zip-ENV1-resources</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptor>assembly-descriptor-ENV1.xml</descriptor>
</configuration>
</execution>
Et chaque descripteur est très similaire. Le "normal" de l'assemblée desrciptor:
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 "
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance "
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2
http://maven.apache.org/xsd/assembly-1.1.2.xsd ">
<id>Resources</id>
<includeBaseDirectory>false</includeBaseDirectory>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<directory>src/main/resources</directory>
<includes>
<include>*.properties</include>
<include>*.xml</include>
</includes>
<outputDirectory>/</outputDirectory>
<filtered>true</filtered>
</fileSet>
<fileSet>
<directory>${project.build.outputDirectory}/resources</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>**/*</include>
</includes>
</fileSet>
</fileSets>
</assembly>
Un environnement spécifique descripteur:
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 "
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance "
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2
http://maven.apache.org/xsd/assembly-1.1.2.xsd ">
<id>Resources-ENV1</id>
<includeBaseDirectory>false</includeBaseDirectory>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<directory>src/main/resources</directory>
<includes>
<include>*.properties</include>
<include>*.xml</include>
</includes>
<!-- exclude environment-specific files -->
<excludes>
<exclude>resource1</exclude>
</excludes>
<outputDirectory>/</outputDirectory>
<filtered>true</filtered>
</fileSet>
<fileSet>
<directory>src/main/resources/ENV1</directory>
<includes>
<include>*.properties</include>
<include>*.xml</include>
</includes>
<outputDirectory>/</outputDirectory>
<filtered>true</filtered>
</fileSet>
<fileSet>
<directory>${project.build.outputDirectory}/resources</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>**/*</include>
</includes>
</fileSet>
</fileSets>
</assembly>
Cette solution fonctionne, mais il se sent très inefficace. Je n'aime pas avoir plusieurs assemblées pour chaque environnement sont presque identiques, sauf pour l'environnement des noms. Est-il possible de rationaliser ce?
OriginalL'auteur FrustratedWithFormsDesigner | 2013-10-28
Vous devez vous connecter pour publier un commentaire.
En supposant que la structure suivante:
où vous pouvez utiliser l'assembly-descriptor comme ceci:
à l'aide de la itérateur-maven-plugin permettra de résoudre le problème:
La itérateur-maven-plugin est disponible via maven central. Je pense que vous pouvez adapter la configuration ci-dessus ou de la structure à votre problème.
Cela peut être une solution plus simple en attendant: github.com/khmarbaise/multienv-maven-plugin
OriginalL'auteur khmarbaise
Avoir foiré avec un problème similaire pour un long moment, je me suis débarrassé de tonnes de code XML, en utilisant les solutions de contournement suivantes:
Créer la même archive zip pour tous les environnements; les ressources doivent être extraites ou accessibles en fonction de l'environnement (nom d'hôte du serveur, les variables d'environnement, etc.)
Créer un seul JAVA/Groovy classe qui va construire tout le nécessaire à l'environnement spécifique des assemblages et de l'exécuter via maven-exec-exécution des plugins.
Voir ici github.com/khmarbaise/multienv-maven-plugin
OriginalL'auteur Alex.Artyukhovskii