Gewusst wie: überschreiben von Dateien in die war-Datei während des maven-build?

Ich habe ein Java-webapp-Projekt, das ich entwickle in Eclipse (genauer gesagt MyEclipse 10) und bauen mit Maven 3.

Habe ich das folgende layout (einschließlich nur relevanten Dateien zu meinem problem :

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

Wie Sie sehen können, habe ich eine Reihe von Konfigurations-Dateien. Derjenige, der bei Ihrer ordnungsgemäßen Position innerhalb der Projekt-Struktur, D. H. die innerhalb src/main/resources und src/main/webapp sind diejenigen, die ich regelmäßig, wenn ich in MyEclipse. Die ich verwenden kann, MyEclipse-Steckverbinder zur automatischen Aktualisierung einer Bereitstellung, um z.B. einen Tomcat-Instanz auf meine dev-Maschine. Ich klicken Sie einfach auf "run server" und ich kann Debuggen. Keine Notwendigkeit für die Verwendung von Maven an alle, die in diesem Kontext tatsächlich.

Dann, wenn ich bauen möchte, eine Freigabe für eine andere Umgebung, wie z.B. Test oder in der Produktion, ich Lauf mvn -P test clean install und es baut einen schönen KRIEG.

Mein Ziel ist, ersetzen Sie die Konfigurations-Dateien, die sich im letzten KRIEG durch die in der src/config/{environment}/.

Habe ich profile in meinem pom.xml:

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

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

Dann versuche ich zu kopieren, diese Ressourcen aus dem angegebenen Profil (mit der environment variable) auf die richtige Position im KRIEG (oder dem temporären Ordner, der gezippt werden in einem KRIEG) :

<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>

Nun, dies scheint zu funktionieren, außer, dass der "standard" Ressourcen kopiert werden in das Verzeichnis NACH diesem, so dass Sie diese Dateien überschrieben. Also ich habe immer am Ende mit z.B. der log4j.xml aus src/main/resources statt aus sagen src/main/configuration/prod/

Auszug aus dem Maven-Ausgang :

[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]

Wie Sie sehen können, die auf die Letzte Zeile, die Sachen von src/main/webapp kopiert NACH, so überschreiben Sie meine benutzerdefinierte Dateien 🙁

Meine Frage : Wie force Maven zu verwenden, die Dateien "von der aktivierten Profil" und irgendwie ÜBERSCHREIBEN der "natürlichen" - Dateien ?

InformationsquelleAutor Pierre Henry | 2012-10-04
Schreibe einen Kommentar