maven - framework - spring mvc 4 tutorial español
¿Cómo reemplazar un valor en web.xml con una propiedad Maven? (5)
Agregar a su sección 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>
Vea Maven: Personalice web.xml del proyecto de la aplicación web para más detalles
Tengo un proyecto Maven que descarga algunos archivos de prueba en su directorio de compilación ./target/files
. Estos archivos deberían estar disponibles para un servlet, lo que puedo lograr fácilmente codificando la ruta completa como <init-param>
del 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>
¿Cómo puedo evitar codificar de manera rígida la ruta completa y usar en su lugar un reemplazo dinámico de parámetros? Intenté lo siguiente, pero no funcionó:
<param-value>${project.build.directory}/files</param-value>
Creo que puede usar la opción filteringDeploymentDescriptors de maven-war-plugin para filtrar los descriptores de despliegue:
<properties>
<maven.war.filteringDeploymentDescriptors>true</maven.war.filteringDeploymentDescriptors>
</properties>
La codificación de los parámetros de maven en web.xml no puede funcionar directamente, porque en el tiempo de ejecución, cuando se inicia la aplicación, maven ha terminado su trabajo y la aplicación no tiene conocimiento sobre maven.
Puedes filtrar un web.xml alternativo (ver maven filtering: http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html ) y usarlo para construir la guerra (mira el parámetro webXml en la documentación del complemento de guerra: http://maven.apache.org/plugins/maven-war-plugin/war-mojo.html )
Puede usar Replace Ant Task para hacerlo.
Aquí hay una implementación de ejemplo donde reemplazo las tokenkeys en un archivo de propiedades, las adapto a sus necesidades
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>
voila! Ahora ejecute
mvn clean package
Simplemente puede usar los recursos de filtrado de maven:
<build>
...
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
...
</resources>
...
</build>
...
</project>
También puede combinar esto y desea filtrar algunos archivos mientras que otros no deben filtrarse:
<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>
Coloque marcadores de posición apropiados en los archivos que le gustaría haber reemplazado cosas como $ {home}.