Estoy escribiendo un proyecto para pruebas de aceptación y, por varias razones, esto depende de otro proyecto empaquetado como WAR. Me las arreglé para descomprimir el WAR usando el complemento maven-dependency-plugin, pero no puedo hacer que mi proyecto incluya el desempaquetado WEB-INF/lib/*.jar
y WEB-INF/classes/*
se incluya en la ruta de clase, por lo que la compilación falla. ¿Hay alguna forma de incluir estos archivos en la ruta de clases, o hay una mejor manera de depender de un WAR?
Muchas gracias.
maven
maven-2
war
maven-dependency-plugin
deelo55
fuente
fuente
De hecho, por diseño, Maven no resuelve las dependencias transitivas de una guerra declarada como dependencia de un proyecto. En realidad, hay un problema al respecto, MNG-1991 , pero no se resolverá en Maven 2.xy
no estoy seguro deno saber si las superposiciones permiten solucionar este problema. Mi comprensión de la solución sugerida es duplicar las dependencias, por ejemplo, en un proyecto de tipo pom.(EDITAR: Después de investigar un poco más, encontré algo interesante en este hilo que cito a continuación:
Por lo tanto, no tengo ninguna experiencia con él, pero el complemento warpath de maven en realidad se ve agradable y simple y está disponible en el repositorio central. Para usarlo, incluya el siguiente elemento de configuración del complemento en su
pom.xml
archivo:[...] <build> <plugins> <plugin> <groupId>org.appfuse</groupId> <artifactId>maven-warpath-plugin</artifactId> <version>1.0-SNAPSHOT</version> <extensions>true</extensions> <executions> <execution> <goals> <goal>add-classes</goal> </goals> </execution> </executions> </plugin> </plugins> </build> [...]
Y agregue las dependencias de guerra que desee incluir en el classpath como dependencias de tipo warpath :
[...] <dependencies> <dependency> <groupId>org.appfuse</groupId> <artifactId>appfuse-web</artifactId> <version>2.0</version> <type>war</type> </dependency> <dependency> <groupId>org.appfuse</groupId> <artifactId>appfuse-web</artifactId> <version>2.0</version> <type>warpath</type> </dependency> </dependencies> [...]
Se necesitan los tipos de dependencia war y warpath: el tipo war lo usa el complemento war de Maven para realizar la superposición de guerra, el tipo warpath lo usa el complemento Warpath para determinar la lista correcta de artefactos para su inclusión en la ruta de clases del proyecto.
Lo intentaría.)
fuente
Utilice superposiciones . Primero, su proyecto de prueba debe tener también empaque
war
.Declare la dependencia del proyecto de guerra que desea probar:
<dependency> <groupId>${project.groupId}</groupId> <artifactId>your-project-arftifactId</artifactId> <version>${project.version}</version> <type>war</type> <scope>test</scope> </dependency>
luego configure la superposición de maven-war-plugin:
<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <webResources> <resource> <directory>${basedir}/src/main/webresources</directory> <filtering>true</filtering> </resource> </webResources> <overlays> <overlay/> <overlay> <groupId>your.group</groupId> <artifactId>your-project-artifactId</artifactId> </overlay> </overlays> </configuration> </plugin>
En el ejemplo anterior en el proyecto de prueba, sobrescribo los archivos de configuración de recursos web (como conxtext, etc.).
EDITAR: esta solución no se probó con Maven 3.
fuente
Buen punto, Justin. Eso me hizo realmente resolver mi problema, a saber: incluir una guerra en una asamblea Y todas sus dependencias transitivas. No pude duplicar la dependencia de guerra como 'jar' como sugirió, ya que el complemento de ensamblaje no encontraría un jar al que hace referencia ese groupId / artefactId, pero
¡trabajos! La guerra y sus dependencias transitivas no se incluyen en la asamblea. Para excluir el archivo pom (que ahora también aparece), tuve que agregar un elemento de exclusión como este:
<excludes> <exclude>*:pom</exclude> </excludes>
en mi archivo assembly.xml.
Creo que esto también podría ser una solución para la pregunta original de este hilo.
fuente
Si enumera la dependencia en el proyecto de guerra como una dependencia de jar, parece recoger los jar / recursos necesarios. Estoy usando Maven 2.2 + m2eclipse.
fuente