Comment faire de la place maven tous les pots communs à l'intérieur même des guerres EAR à la racine OREILLE?

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

Question

Nous avons une solution avec de nombreuses guerres. Les guerres sont similaires dans le sens qu'ils utilisent tous en veille prolongée et au printemps. Cela signifie que nous avons un certain nombre de pots mêmes à l'intérieur de chaque guerre. Cela devient un problème, car la taille de l'oreille commence à se développer hors de proportion.

Je voudrais utiliser Maven pour calculer les dépendances et de placer tous les pots communs à plusieurs guerres à la racine de l'oreille.

J'ai essayé organiser mon projet à l'aide archétype j2ee (maven-archetype-j2ee-simples), mais toutes les guerres sont toujours emballés avec des dépendances à l'intérieur du WEB-INF / lib. Y at-il un moyen de faire Maven calculer les dépendances communes et les placer à l'oreille, tout comme il est capable de calculer toutes les dépendances transitoires lors de la construction d'une guerre ou un pot?

Était-ce utile?

La solution

Créer un nouvel artefact nommé jarres de la Chambre des communes et le paquet comme pom. Il doit dépendre de tous les pots communs que vous utilisez -. Spring, Hibernate, Log4j, etc

Ensuite, dans chaque vos guerres ajouter comme la dépendance à la portée « fourni » (et ne pas oublier de définir le type pom). Vous pourrez le voir dans votre classpath, mais ils ne seront pas emballés dans la guerre. De cette façon, vous pouvez aussi avoir des dépendances spécifiques de guerre emballés en elle, que la solution guerres maigres ne fournit pas.

Autres conseils

Comme vous l'avez mentionné dans un commentaire, la tâche de ce maven pour calculer toutes les dépendances. Lorsque vous créez un artefact, avec toutes les dépendances communes, alors vous aurez également à deviner, qui dépendances appartiennent là.

Il pourrait également être possible, que vous devez déployer une guerre, avec ses dépendances sur une autre machine sans une oreille, un lorsque vous définissez toutes les dépendances de guerre à condition, alors vous êtes coincé à nouveau.

La seule bonne façon, pour obtenir des guerres maigres est des exemples: http://maven.apache.org/plugins/maven -war-plugin / examples / maigrichon-wars.html

Mais, et vient maintenant la partie intéressante, il y a une grande! raccourci (qui prend complètement disparaître la douleur mentionnée), de dire maven, qui ont des dépendances vos WARs.

Allez dans votre EAR-Module un déclarer une seconde dépendance à la guerre avec le type pom pour chaque dépendance 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>

Maintenant, chaque WAR sera emballé de façon indépendante avec ses propres dépendances et l'AER sera emballé avec WARs maigres et chaque dépendance dans le dossier lib

Mise à jour:

Gardez à l'esprit, que l'oreille / dossier lib ne peut pas être utilisé pour chaque pot de dépendance dans un conteneur strict comme JBoss EAP 6. JSF bibliothèques de composants comme Tomahawk, primefaces, etc. doivent résider dans WEB-INF / lib dossier.

Une façon pratique d'y parvenir avec la solution décrite ci-dessus est de faire une exclusion pour la bibliothèque de composants dans le BME pom.xml comme ceci:

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

Maintenant, chaque dépendance de la guerre sera placé dans l'oreille / lib sauf la bibliothèque de composants qui sera placée dans WEB-INF / lib dans WAR

Vous pouvez définir le portée dépendances "à condition de". Cela signifie qu'ils seront fournis par un autre module et ne seront pas inclus dans le pot final ou la guerre.

Peut-être le plug-in de montage peut vous aider lors de l'emballage jusqu'à la finale EAR et placer des pots communs là-bas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top