Ho un progetto webapp Java che ho sviluppato in Eclipse (più precisamente MyEclipse 10) e costruire usando Maven 3.Come sovrascrivere i file nel file WAR durante la generazione di Maven?
ho il seguente schema (inclusi solo i file relativi al mio problema:
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
Come potete vedere, ho incluso un certo numero di file di configurazione: quelli che si trovano nella posizione corretta all'interno del progetto, cioè all'interno di src/main/resources
e src/main/webapp
sono quelli che uso abitualmente quando lavoro in MyEclipse. Posso usare i connettori MyEclipse per aggiornare automaticamente una distribuzione, ad esempio un'istanza di Tomcat sulla mia macchina di sviluppo, faccio semplicemente clic su "Esegui server" e posso eseguire il de bug. Non c'è assolutamente bisogno di usare Maven in questo contesto.
Quindi, quando voglio creare un rilascio per un altro ambiente come test o produzione, eseguo mvn -P test clean install
e crea una bella GUERRA.
Il mio obiettivo è sostituire i file di configurazione all'interno della finale WAR con quelli in src/config/{environment}/
.
ho impostato un profilo nel mio pom.xml
:
<profiles>
<profile>
<id>test</id>
<properties>
<environment>test</environment>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<environment>prod</environment>
</properties>
</profile>
</profiles>
Poi, provo a copiare queste risorse dal profilo specificato (utilizzando la variabile environment
) nella posizione corretta all'interno del GUERRA (o la cartella temporanea saranno compressi in un WAR):
<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>
Ora, questo sembra funzionare, se non che le risorse "standard" vengono copiati nella directory dopo questo, in modo da sovrascrivere tali file. Così finisco sempre con, ad es. il log4j.xml
da src/main/resources
al posto di quello da dire src/main/configuration/prod/
Estratto della uscita Maven:
[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]
Come si può vedere l'ultima riga, roba da src/main/webapp
viene copiato DOPO, sovrascrivendo così il mio file personalizzati: (
la mia domanda: Come forzare Maven di utilizzare i file "dal profilo attivato" e in qualche modo sovrascrivere i file "naturali"
Brillante informazione. Stavo cercando la soluzione esatta e l'ho presa. Molte grazie. –