Jak już wspomniałeś w komentarzu, zadaniem maven jest obliczyć każdą zależność. Kiedy tworzysz artefakt, przy każdej wspólnej zależności, musisz także zgadywać, które zależności należą do niego.
Może być również możliwe, że musisz wdrożyć jedną wojnę, z jej zależnościami na innej maszynie bez ucha, a kiedy ustawisz każdą zależność wojenną pod warunkiem, to utkniesz ponownie.
Jedynym właściwym sposobem, aby dostać chude Wars to z przykładów: http://maven.apache.org/plugins/maven-war-plugin/examples/skinny-wars.html
Ale i teraz jest interesujący, jest jeden duży! skrót (który całkowicie usuwa wspomniany ból), aby powiedzieć mavenowi, jakie zależności mają twoje WAR.
Wejdź do swojego modułu EAR i zadeklaruj drugą zależność od WAR z typem pom dla każdej zależności 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>
Teraz każda wojna będzie pakowany niezależnie z jego własnych uzależnień i EAR zostaną zapakowane z chudych wojen i każdego uzależnienia w folderze lib
Aktualizacja:
Należy pamiętać, że folder ear/lib nie może być używany dla każdego zasobu zależności w ścisłym kontenerze, takim jak JBoss EAP 6. Biblioteki komponentów JSF, takie jak tomahawk, prymitywów itp. Muszą e w folderze WEB-INF/lib.
wygodnym sposobem do osiągnięcia tego celu z wyżej opisanego rozwiązania jest to, aby wykluczenie dla biblioteki komponentów w pom.xml uszach jak ten:
...
<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>
...
Teraz każdy zależność wojny zostaną umieszczone w ear/lib z wyjątkiem biblioteki komponentów, która zostanie umieszczona w WEB-INF/lib wewnątrz WAR
Po utworzeniu commons-jars.jar, powinniśmy dodać to do 1) server/default/lib lub 2) ear root? – Rips
NIE najlepszy sposób, aby przejść, patrz następna odpowiedź! – Christophe
@toefel, określ "następną" odpowiedź. Odpowiedź WHOM lub link będzie pomocna, ponieważ mogą zmieniać miejsca na podstawie głosów. – Ben