À 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