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


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

Me gustaría usar Maven para calcular dependencias y colocar todos los frascos comunes a múltiples guerras en la raíz de la OREJA.

Intenté organizar mi proyecto usando j2ee archetype (maven-archetype-j2ee-simple), pero todas las guerras todavía están empaquetadas con dependencias dentro de la WEB-INF / lib. ¿Hay alguna manera de hacer que Maven calcule las dependencias comunes y las ponga al OÍDO, al igual que es capaz de calcular todas las dependencias de transición al construir una guerra o un tarro?

Author: Dan, 2009-05-11

4 answers

Crear un nuevo artefacto llamado commons-jars y empaquetarlo como pom. Debe depender de todos los frascos comunes que esté utilizando: Primavera, Hibernación, Log4j, etc.

Luego, en cada uno de tus wars añádelo como dependencia con alcance "proporcionado" (y no olvides establecer el tipo como pom). Usted será capaz de verlo en su classpath, pero no serán empaquetados en la guerra. De esta manera también puede tener dependencias específicas de guerra empaquetadas en él, lo que la solución de skinny wars no hace proporcionar.

 8
Author: David Rabinowitz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-18 13:54:26

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

También podría ser posible, que usted tiene que desplegar una guerra, con sus dependencias en otra máquina sin un oído, y cuando se establece cada dependencia de guerra a siempre, entonces usted está atascado de nuevo.

La única manera correcta, para conseguir guerras flacas es de la 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 decirle a maven, qué dependencias tienen sus guerras.

Entra en tu módulo EAR y declara una segunda dependencia de la GUERRA con el tipo pom para cada dependencia de 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á empaquetada independientemente con sus propias dependencias y el EAR se empaquetará con skinny WARs y cada dependencia dentro de la carpeta lib

Actualización:

Tenga en cuenta que la carpeta ear/lib no se puede usar para cada jar de dependencias en un contenedor estricto como JBoss EAP 6. Bibliotecas de componentes JSF como tomahawk, primefaces, etc. tiene 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 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 todas las dependencias de la GUERRA se colocarán en ear/lib, excepto la biblioteca de componentes que se colocará en WEB-INF/lib dentro de la GUERRA

 61
Author: Turbokiwi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-31 12:36:48

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

Tal vez el complemento de ensamblaje pueda ayudarlo a empaquetar la OREJA final y colocar frascos comunes allí.

 4
Author: Mike Pone,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-11 18:56:11
 4
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-05 21:48:57