Je dois créer une guerre de test et une guerre de production, qui auront un fichier log4j.properties
différent dans le répertoire WEB-INF
. J'ai ces fichiers log4j.properties
(test war) et dev.log4j.properties
(pour la production enivorment).
Comment copier le fichier dev.log4j.properties
dans le fichier log4j.properties
pour la guerre de production?
Créez un profil "dev" et "prod" en sélectionnant un autre ensemble de ressources pour chaque profil. Activer Dev par défaut.
<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<resources>
<resource>
<directory>src/main/resources/dev</directory>
</resource>
</resources>
</build>
</profile>
<profile>
<id>prod</id>
<build>
<resources>
<resource>
<directory>src/main/resources/prod</directory>
</resource>
</resources>
</build>
</profile>
</profiles>
Construire en utilisant le profil souhaité via: mvn install -Pdev
Ou mvn install -Pprod
J'ai résolu ce problème en utilisant le plugin maven-resources, où j'ai créé le répertoire prod qui contient les ressources pour l'environnement de production et les ai copiées dans le répertoire WEB-INF/classes lors de la phase processus-ressources.
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<id>copy-prod-resources</id>
<phase>process-resources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>webapp/WEB-INF/classes</outputDirectory>
<resources>
<resource>
<directory>src/main/resources/prod</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
Le code ci-dessus n'a pas fonctionné pour moi. J'ai dû le modifier comme suit:
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-prod-resources</id>
<phase>process-resources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<!-- this is important -->
<overwrite>true</overwrite>
<!-- this as well (target/ was missing) -->
<outputDirectory>${basedir}/target/classes</outputDirectory>
<resources>
<resource>
<directory>src/main/resources/prod</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
La dernière réponse fonctionne… .. Mais vous devez donner la version pour que cela fonctionne.
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<id>copy-prod-resources</id>
<phase>process-resources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<!-- this is important -->
<overwrite>true</overwrite>
<!-- target -->
<outputDirectory>${basedir}/target/classes</outputDirectory>
<resources>
<resource>
<!-- source -->
<directory>src/main/resources/prod</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
La méthode alternative consiste à utiliser maven-antrun-plugin
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>build.env: ${build.env} </echo>
<delete file="src/main/resources/log4j.properties" />
<copy file="src/env/${build.env}/log4j.properties"
tofile="src/main/resources/log4j.properties" />
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Supposons que les fichiers de ressources sont dans la structure suivante:
src/
env/
dev/
log4j.properties
local/
log4j.properties
prod/
log4j.properties
Lorsque maven est créé, exécutez les commandes suivantes par environnement:
mvn package -Dbuild.env=dev
mvn package -Dbuild.env=local
mvn package -Dbuild.env=prod