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

StackOverflow https://stackoverflow.com/questions/848947

Pregunta

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

Me gustaría usar Maven para calcular las dependencias y colocar todos los archivos jar comunes a múltiples guerras en la raíz del EAR.

Intenté organizar mi proyecto usando el arquetipo j2ee (maven-archetype-j2ee-simple), pero todas las guerras todavía 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 al construir una guerra o un frasco?

¿Fue útil?

Solución

Cree un nuevo artefacto llamado commons-jars y empaquetelo como pom.Debería depender de todos los archivos jar comunes que esté utilizando: Spring, Hibernate, Log4j, etc.

Luego, en cada una de tus guerras, agrégala como dependencia con alcance "proporcionado" (y no olvides establecer el tipo como pom).Podrás verlo en tu classpath pero no estarán incluidos en la guerra.De esta manera, también puede empaquetar dependencias específicas de guerra, lo que la solución de guerras flacas no provee.

Otros consejos

Como se ha mencionado en un comentario, tarea del experto de calcular cada dependencia. Al crear un artefacto, con cada dependencia común, entonces también tendrá que adivinar, que las dependencias pertenecen allí.

También podría ser posible, que tiene que implementar una guerra, con sus dependencias en otra máquina sin una oreja, una cuando se establece cada dependencia de la guerra para siempre, entonces usted está atascado de nuevo.

La única manera correcta, para obtener guerras flacos es a partir de los ejemplos: http://maven.apache.org/plugins/maven -Guerra-plugin / examples / flaco-wars.html

Pero, y ahora viene la parte interesante, hay un gran! acceso directo (que toma completamente quitar el dolor mencionado), para decirle experto, que sus dependencias guerras tienen.

Ir dentro de la oreja-Módulo de un declarar una segunda dependencia de la guerra con el tipo pom para cada dependencia GUERRA.

<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 guerra será empaquetado de forma independiente con sus propias dependencias y el oído será empaquetado con WAR flacos y cada dependencia dentro de la carpeta lib

Actualización:

Tenga en cuenta, que la carpeta del oído / lib no se puede utilizar para cada frasco de la dependencia en un recipiente estricta como JBoss EAP 6. bibliotecas de componentes JSF como hacha de guerra, PrimeFaces, etc. tienen que residir en WEB-INF / lib carpeta.

Una manera práctica de lograr esto con la solución descrita anteriormente es hacer una exclusión para la biblioteca de componentes en los oídos pom.xml como esto:

...
<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 cada dependencia de la guerra será colocado en la oreja / lib excepto la biblioteca de componentes que se colocará en WEB-INF / lib dentro de la WAR

Es posible ajustar el dependencias alcance a "previsto". Esto significa que serán proporcionados por algún otro módulo y no se incluirán en el frasco final o la guerra.

Tal vez la montaje plug-in puede ayudar al empaquetar hasta la final EAR y colocar frascos comunes allí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top