Ich habe ein Java-Webapp Projekt, das ich in Eclipse entwickeln (genauer MyEclipse 10) und bauen mit Maven 3.Wie überschreiben Dateien in der WAR-Datei während Maven Build?
Ich habe folgendes Layout (einschließlich nur die 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 Konfigurationsdateien hinzugefügt, von denen ich an der richtigen Stelle innerhalb des Projekts struture bin, dh innerhalb src/main/resources
und src/main/webapp
. Ich kann MyEclipse-Konnektoren verwenden, die ich routinemäßig verwende um zB eine Tomcat-Instanz auf meinem Dev-Rechner automatisch zu aktualisieren, klicke ich einfach auf "run server" und ich kann de Fehler. In diesem Zusammenhang muss Maven überhaupt nicht verwendet werden.
Wenn ich dann ein Release für eine andere Umgebung wie Test oder Produktion erstellen möchte, starte ich mvn -P test clean install
und es baut eine schöne WAR.
Mein Ziel ist es, die Konfigurationsdateien in der endgültigen WAR durch diejenigen in src/config/{environment}/
zu ersetzen.
Ich habe eingestellt Profile in meine 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, diese Ressourcen aus dem angegebenen Profil zu kopieren (die environment
Variable) an die richtige Stelle im Innern des IST (oder der temporäre Ordner, wird in einen Krieg gezippt):
<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 scheint diese Ausnahme zu arbeiten, dass die „Standard“ Ressourcen nach diesem in das Verzeichnis kopiert werden, so dass sie überschreiben diese Dateien. So komme ich immer mit z. die log4j.xml
von src/main/resources
statt der von etwa 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 nach dem Einschalten der letzten Zeile, Sachen von src/main/webapp
kopiert werden sehen können, so meine benutzerdefinierten Dateien überschrieben werden: (
Meine Frage: Wie Maven zu zwingen, die Dateien zu verwenden „aus dem aktivierten Profil“ und ERSETZEN irgendwie die „natürlichen“ Dateien
Brilliantes Stück Information. Ich suchte nach der genauen Lösung und bekam es. Danke vielmals. –