proyecto plugin generar example create crear con maven-2 dependencies package war ear

maven 2 - plugin - ¿Cómo hacer que Maven coloque todos los frascos comunes a las guerras dentro de la misma raíz EAR a EAR?



maven project to ear (4)

Tenemos una solución con numerosas guerras. Las guerras son similares en el sentido de que todas usan hibernación y primavera. Esto significa que tenemos varios frascos iguales dentro de cada guerra. Esto se está convirtiendo en un problema, porque el tamaño de la oreja comienza a crecer fuera de proporción.

Me gustaría usar Maven para calcular las dependencias y colocar todos los frascos comunes a varias guerras en la raíz del EAR.

Intenté organizar mi proyecto usando el arquetipo j2ee (maven-archetype-j2ee-simple), pero todas las guerras aún están empaquetadas con dependencias dentro de WEB-INF / lib. ¿Hay alguna manera de hacer que Maven calcule las dependencias comunes y las coloque en EAR, de la misma manera que puede calcular todas las dependencias de transición cuando construye una guerra o un frasco?


Como mencionó en un comentario, la tarea de Maven es calcular cada dependencia. Cuando está creando un artefacto, con cada dependencia común, también tendrá que adivinar qué dependencias pertenecen allí.

También podría ser posible, que tengas que desplegar una guerra, con sus dependencias en otra máquina sin oído, y cuando configuras todas las dependencias de guerra, entonces te quedas atascado nuevamente.

La única manera correcta de obtener guerras flacas es a partir de los ejemplos: http://maven.apache.org/plugins/maven-war-plugin/examples/skinny-wars.html

Pero, y ahora viene la parte interesante, ¡hay una grande! atajo (que elimina completamente el dolor mencionado), para indicar a Maven, qué dependencias tienen sus WAR.

Vaya dentro de su módulo EAR y declare una segunda dependencia de WAR con el tipo pom para cada dependencia WAR.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.foo</groupId> <artifactId>skinny</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>ear</artifactId> <packaging>ear</packaging> <dependencies> <dependency> <groupId>com.foo</groupId> <artifactId>war</artifactId> <version>0.0.1-SNAPSHOT</version> <type>war</type> </dependency> <dependency> <groupId>com.foo</groupId> <artifactId>war</artifactId> <version>0.0.1-SNAPSHOT</version> <type>pom</type> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-ear-plugin</artifactId> <version>2.8</version> <configuration> <skinnyWars>true</skinnyWars> <defaultLibBundleDir>lib</defaultLibBundleDir> <modules> <webModule> <groupId>com.foo</groupId> <artifactId>war</artifactId> </webModule> </modules> </configuration> </plugin> </plugins> </build>

Ahora, cada WAR se empaquetará de forma independiente con sus propias dependencias y el EAR se empaquetará con WAR flacos y todas las dependencias dentro de la carpeta lib

Actualizar:

Tenga en cuenta que la carpeta ear / lib no se puede usar para cada contenedor de dependencia en un contenedor estricto como JBoss EAP 6. Las bibliotecas de componentes JSF como tomahawk, primefaces, etc. tienen que residir en la carpeta WEB-INF / lib.

Una forma práctica de lograr esto con la solución descrita anteriormente es hacer una exclusión para la biblioteca de componentes en el archivo pom.xml de EAR de esta manera:

... <dependencies> <dependency> <groupId>com.foo</groupId> <artifactId>war</artifactId> <version>0.0.1-SNAPSHOT</version> <type>war</type> </dependency> <dependency> <groupId>com.foo</groupId> <artifactId>war</artifactId> <version>0.0.1-SNAPSHOT</version> <type>pom</type> <exclusions> <exclusion> <groupId>org.primefaces</groupId> <artifactId>primefaces</artifactId> <exclusion> </exclusions> </dependency> </dependencies> ...

Ahora todas las dependencias de WAR se colocarán en ear / lib, excepto la biblioteca de componentes que se colocará en WEB-INF / lib dentro de WAR


Crea un nuevo artefacto llamado commons-jars y envuélvelo como pom. Debería depender de todos los tarros comunes que esté utilizando: Spring, Hibernate, Log4j, etc.

Luego, en cada una de tus guerras, agrégala como dependencia con el alcance "proporcionado" (y no olvides establecer el tipo como pom). Podrás verlo en tu ruta de clase, pero no se incluirán en la guerra. De esta manera, también puede tener dependencias específicas de la guerra empaquetadas en él, que la solución de las guerras flacas no proporciona.


Puede establecer el alcance de las dependencias en "proporcionado". Esto significa que serán proporcionados por algún otro módulo y no se incluirán en el frasco o la guerra final.

Tal vez el complemento de ensamblaje puede ayudarlo a empaquetar el EAR final y colocar los tarros comunes allí.