Comment faire pour remplacer les fichiers dans le fichier WAR pendant maven build?

J'ai un Java webapp projet que je développe dans Eclipse (plus précisément MyEclipse 10) et de construire à l'aide de Maven 3.

J'ai le schéma suivant (en incluant seulement les fichiers pertinents à mon problème :

project root
|-- src
|   |-- main
|   |   |-- java
|   |   |-- resources
|   |   |   |-- log4j.xml
|   |   |   +-- struts.properties
|   |   |-- webapp
|   |   |   |-- META-INF
|   |   |   |   +--context.xml
|   |   |-- config
|   |   |   |-- test
|   |   |   |   |--log4j.xml
|   |   |   |   |--struts.properties
|   |   |   |   +--context.xml
|   |   |   +-- prod
|   |   |   |   |--log4j.xml
|   |   |   |   |--struts.properties
|   |   |   |   +--context.xml
|   +--test
+--pom.xml

Comme vous pouvez le voir, j'ai inclus un certain nombre de fichiers de configuration. Celui qui se trouvent à leur emplacement approprié dans le cadre du projet struture, c'est à dire à l'intérieur de src/main/resources et src/main/webapp sont ceux que j'utilise régulièrement quand je travail dans MyEclipse. Je peux utiliser MyEclipse connecteurs de mise à jour automatique d'un déploiement par exemple, un Tomcat exemple sur ma machine de dev. Je viens de cliquer sur "serveur" et je puis de débogage. Pas besoin d'utiliser Maven à tous, dans ce contexte, en fait.

Ensuite, quand je veux créer une version pour un autre environnement, tels que le test ou de production, je lance mvn -P test clean install et il construit une belle GUERRE.

Mon but est de remplacer les fichiers de configuration à l'intérieur de la finale de la GUERRE par ceux qui src/config/{environment}/.

J'ai mis des profils dans mon pom.xml:

<profiles>
    <profile>
        <id>test</id>
        <properties>
            <environment>test</environment>
        </properties>
    </profile>

    <profile>
        <id>prod</id>
        <properties>
            <environment>prod</environment>
        </properties>
    </profile>
</profiles>

Alors, j'essaye de copier ces ressources à partir du profil spécifié (à l'aide de la environment variable) à l'emplacement correct à l'intérieur de la GUERRE (ou le dossier temporaire qui sera compressé dans une GUERRE) :

<webResources>
    <resource>
        <directory>/src/main/config/${environment}</directory>
        <targetPath>META-INF/</targetPath>
        <includes>
            <include>context.xml</include>
        </includes>
    </resource>
    <resource>
        <directory>src/main/config/${environment}</directory>
        <targetPath>WEB-INF/classes/</targetPath>
        <includes>
            <include>
                struts.properties
            </include>
            <include>
                log4j.xml
            </include>
        </includes>
    </resource>
</webResources>

Maintenant, cela semble fonctionner, sauf que le "standard" des ressources sont copiés dans le répertoire APRÈS cela, de sorte qu'ils remplacer ces fichiers. Donc, je finis toujours par exemple, avec la log4j.xml de src/main/resources au lieu de celui de dire src/main/configuration/prod/

Extrait de l'Maven de sortie :

[INFO] Processing war project
[INFO] Copying webapp webResources [D:\workspace\MyProject/src/main/config/prod] to [D:\workspaces\SITEL\Webfauna\target\Webfauna]
[INFO] Copying webapp webResources [D:\workspace\MyProject\src/main/config/prod] to [D:\workspaces\SITEL\Webfauna\target\Webfauna]
[INFO] Copying webapp resources [D:\workspace\MyProject\src\main\webapp]

Comme vous pouvez le voir sur la dernière ligne, des trucs de src/main/webapp est copié d'APRÈS, donc d'écraser mes fichiers personnalisés 🙁

Ma question : Comment faire pour forcer Maven pour utiliser les fichiers "dans le profil activé" et en quelque sorte REMPLACER le "naturel" des fichiers ?

OriginalL'auteur Pierre Henry | 2012-10-04