J'ai un projet Maven qui télécharge des fichiers de test dans son répertoire de construction ./target/files
. Ces fichiers devraient alors être disponibles pour une servlet, ce que je peux facilement réaliser en codant en dur le chemin complet en tant que <init-param>
du servlet:
<servlet>
<servlet-name>TestServlet</servlet-name>
<servlet-class>my.package.TestServlet</servlet-class>
<init-param>
<param-name>filepath</param-name>
<param-value>/home/user/testproject/target/files</param-value>
</init-param>
</servlet>
Comment puis-je éviter de coder en dur le chemin complet et d'utiliser à la place un remplacement de paramètre dynamique? J'ai essayé ce qui suit, mais cela n'a pas fonctionné:
<param-value>${project.build.directory}/files</param-value>
Ajoutez à votre section pom:
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webResources>
<resource>
<filtering>true</filtering>
<directory>src/main/webapp</directory>
<includes>
<include>**/web.xml</include>
</includes>
</resource>
</webResources>
<warSourceDirectory>src/main/webapp</warSourceDirectory>
<webXml>src/main/webapp/WEB-INF/web.xml</webXml>
</configuration>
</plugin>
Voir Maven: Personnaliser web.xml du projet d'application web pour plus de détails
Vous pouvez simplement utiliser maven filtrage des ressources :
<build>
...
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
...
</resources>
...
</build>
...
</project>
Vous pouvez également combiner cela et souhaitez filtrer certains fichiers alors que d'autres ne devraient pas être filtrés:
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<excludes>
<exclude>**/*.xml</exclude>
</excludes>
</resource>
...
</resources>
Mettez des espaces réservés appropriés dans les fichiers que vous aimeriez avoir remplacés par des éléments comme $ {home}.
Vous pouvez utiliser Remplacer la tâche Ant pour le faire.
Voici un exemple d'implémentation où je remplace les jetons dans un fichier de propriétés, l'adapte à vos besoins
test.properties
SERVER_NAME=@SERVER_NAME@
PROFILE_NAME=@PROFILE_NAME@
pom.xml
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<phase>compile</phase>
<configuration>
<tasks>
<replace dir="${basedir}/src/main/resources" >
<include name="**/*.properties"/>
<replacefilter token="@SERVER_NAME@" value="My Server"/>
<replacefilter token="@PROFILE_NAME@" value="My Profile"/>
</replace>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
le tour est joué! Maintenant, exécutez
mvn clean package
Je pense que vous pouvez utiliser l'option filteringDeploymentDescriptors de maven-war-plugin pour filtrer les descripteurs de déploiement -
<properties>
<maven.war.filteringDeploymentDescriptors>true</maven.war.filteringDeploymentDescriptors>
</properties>
Le codage des paramètres maven dans web.xml ne peut pas fonctionner directement, car au moment de l'exécution, lorsque votre application démarre, maven a terminé son travail et l'application n'a aucune connaissance de maven.
Vous pouvez filtrer un autre fichier web.xml (voir Filtrage maven: http://maven.Apache.org/plugins/maven-resources-plugin/examples/filter.html ) et l'utiliser lors de la construction du war (voir le paramètre webXml dans la documentation du plugin war: http://maven.Apache.org/plugins/maven-war-plugin/war-mojo.html )
Ajouter maven-war-plugin
Et mettre <filteringDeploymentDescriptors>true</filteringDeploymentDescriptors>
pour remplacer l'espace réservé lors de l'exécution de mvn package
<properties>
<project.build.directory>your path</project.build.directory>
</properties>
<build>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
<configuration>
<filteringDeploymentDescriptors>true</filteringDeploymentDescriptors>
</configuration>
</plugin>
</build>