tutorial mvc framework español edicion cuarta books arquitectura accion maven servlets parameters web.xml

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}.