integrar - maven eclipse plugin
El filtrado de recursos web con el complemento de guerra de Maven no funciona en Eclipse con m2e (6)
¿Ha intentado colocar los recursos en src / main / resources / WEB-INF / ... en lugar de configurar el área de recursos para filtrar los recursos en lugar de poner la configuración en una ubicación de Maven no predeterminada?
Estoy tratando de filtrar un archivo de configuración de Spring utilizando el filtro Maven. Mi POM está configurado de esta manera:
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.2</version>
<configuration>
<webResources>
<resource>
<filtering>true</filtering>
<targetPath>WEB-INF/context</targetPath>
<directory>src/main/webapp/WEB-INF/context</directory>
<includes>
<include>applicationContext.xml</include>
</includes>
</resource>
</webResources>
</configuration>
</plugin>
...
y
<profiles>
<profile>
<id>desarrollo</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<filters>
<filter>src/main/properties/dev.properties</filter>
</filters>
</build>
</profile>
<profile>
<id>pruebas</id>
<build>
<filters>
<filter>src/main/properties/test.properties</filter>
</filters>
</build>
</profile>
...
Funciona muy bien cuando invocas a Maven directamente.
Desafortunadamente, cuando implementa la aplicación web en Tomcat 6 con Eclipse WTP y m2e, siempre elige la versión sin filtrar de applicationContext.xml. (El archivo applicationContext.xml en la carpeta target / m2e-wtp / web-resources / WEB-INF / context nunca se filtra)
No puedo encontrar ninguna documentación útil sobre el tema. Ni siquiera estoy seguro de si está implementado en m2e.
¿Hay algún problema con mi configuración o esta es una característica no implementada?
Acabo de tener un problema similar. Mi solución no es elegante y no estoy orgullosa de ella, pero digamos que es aceptable. En mi caso, tengo una aplicación Spring Boot mvc con una aplicación Swagger (para que los evaluadores prueben nuestra API). La cosa es que estamos usando esta aplicación en dos entornos, por lo que creé dos perfiles: dev y test. En dev env nos gustaría activar la aplicación desde eclipse con solo "ejecutar como", por lo que la ruta de contexto está en blanco (sé que se puede configurar en Spring Java Config, pero no es el único marcador de posición que nos gustaría cambiar) y en prueba de la aplicación se ejecuta en nuestra versión personalizada de Tomcat ... por lo que la ruta de contexto es la misma que el nombre del archivo war.
Y aquí está el problema: Swagger está llamando a rest docs en esta ruta de contexto y depende del perfil de Spring. Así que tenemos un recurso web que necesita ser filtrado. Al principio intenté usar el filtrado m2e-wtp:
...
<build>
<plugins>
<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>**/scripts.js</include>
</includes>
</resource>
</webResources>
</configuration>
</plugin>
...
estaba funcionando, pero solo se ejecutaba en eclipse tomcat o desde la línea de comandos java -jar no funcionaba con "ejecutar como" desde eclipse.
El recurso se filtró y los vi en el recurso web en target, pero eclipse parece estar ejecutándose directamente en un código fuente o está haciendo una copia. No sé ... no puede ver los recursos filtrados ... así que pensé que Haré algo como esto:
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<filtering>true</filtering>
<directory>src/main/resources/webapp/swagger</directory>
<targetPath>${basedir}/src/main/webapp/swagger</targetPath>
<includes>
<include>scripts.js</include>
</includes>
</resource>
</resources>
No es la solución más afortunada, ya que es un código modificador y no el objetivo, pero al menos está funcionando. Si alguien tuviera alguna sugerencia sobre cómo hacerlo funcionar sin modificaciones en el código, me encantaría.
Bueno, finalmente lo tengo.
En primer lugar, hice lo que señaló khmarbaise. Moví applicationContext.xml a la carpeta de recursos. Los recursos web del plugin de War están destinados a trabajar con recursos externos, y filtrar un archivo en la carpeta de destino en sí no fue la mejor práctica. Actualicé el POM para reflejar la nueva configuración.
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
y
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.2</version>
<configuration>
<webResources>
<resource>
<filtering>true</filtering>
<targetPath>WEB-INF/context</targetPath>
<directory>src/main/resources/WEB-INF/context</directory>
<includes>
<include>applicationContext.xml</include>
</includes>
</resource>
</webResources>
</configuration>
</plugin>
Entonces, la mitad del crédito para él. Pero eso no fue suficiente, todavía no funcionó. Me di cuenta de que Maven / m2e efectivamente estaba filtrando mi archivo, pero no obtuvo mis archivos de propiedades definidas. Después de algunas pruebas, descubrí que m2e está ignorando la opción activeByDefault
en la sección de activación de perfiles.
Entonces, agregué mi perfil predeterminado a la configuración del proyecto Maven y luego funcionó
He intentado todo lo descrito anteriormente sin éxito. Los archivos se filtraron y se generaron correctamente en la carpeta "m2e-wtp", pero por alguna razón Eclipse estaba copiando archivos de "target / classes".
Por lo tanto, he cambiado mi pom.xml, cambiando la carpeta de destino de "m2e-wtp" a "target / classes", como el código a continuación.
Importante: cada vez que necesite ejecutar una compilación de maven en el proyecto, debe cambiar el pom para construir el proyecto.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
<filters>
<filter>${project.basedir}/src/main/filters/${build.profile.id}/config.properties</filter>
</filters>
<webResources>
<resource>
<filtering>true</filtering>
<directory>${project.basedir}/src/main/resources</directory>
<targetPath>${project.basedir}/target/classes</targetPath>
<includes>
<include>*.properties</include>
<include>*.xml</include>
<include>META-INF/spring/*.xml</include>
</includes>
</resource>
</webResources>
</configuration>
</plugin>
Hoy tuve un problema similar cuando varios frascos fueron incluidos en la guerra. Activé el filtrado y comparé los frascos originales con los filtrados. Parecen ser iguales, pero esto no es cierto. Intenté cambiar el nombre de jar a zip y no pude descomprimir el contenido debido a una estructura dañada dentro de jar (zip), mientras que la original estaba bien. También se menciona aquí que agrega recursos web de filtrado donde se dice que el filtrado debe establecerse como falso para evitar que se corrompan los archivos binarios.
Tuve un problema similar con el filtrado del web.xml. Resolví el problema reimportando todo el proyecto en eclipse.
El motivo fue un archivo /.settings/org.eclipse.wst.common.component dañado. En este archivo se define el orden de los archivos copiados en el directorio de implementación de los servidores web locales. Por ejemplo:
<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
<wb-module deploy-name="liquidvote-rest">
<wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/>
<wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
<property name="context-root" value="myapp"/>
<property name="java-output-path" value="/myapp/target/classes"/>
</wb-module>
</project-modules>
Si el archivo web.xml o application.xml existe en varios directorios, se tomará del primer directorio encontrado. Por eso es importante que
<wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/>
Es la primera entrada.
Encontrará más información en http://wiki.eclipse.org/M2E-WTP_FAQ en la sección "¿Qué es esta carpeta de recursos web?"