Như bạn đã đề cập trong nhận xét, đó là nhiệm vụ của maven để tính toán mọi phụ thuộc. Khi bạn tạo ra một tạo tác, với mọi phụ thuộc chung, thì bạn cũng sẽ phải đoán, phụ thuộc nào ở đó. Cũng có thể có thể, bạn phải triển khai một cuộc chiến, với sự phụ thuộc của nó trên một máy khác mà không có tai, khi bạn đặt mọi phụ thuộc chiến tranh được cung cấp, thì bạn lại bị mắc kẹt lần nữa.
Cách duy nhất đúng, để có được cuộc chiến tranh gầy là từ các ví dụ: http://maven.apache.org/plugins/maven-war-plugin/examples/skinny-wars.html
Nhưng, và bây giờ đến phần thú vị, đó là một trong những lớn! phím tắt (mà hoàn toàn lấy đi nỗi đau được đề cập), để nói với maven, mà phụ thuộc WAR của bạn có.
Vào bên trong mô-đun EAR của bạn khai báo phụ thuộc thứ hai trên WAR với loại pom cho mỗi phụ thuộc 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>
Bây giờ, mỗi WAR sẽ được đóng gói một cách độc lập với sự phụ thuộc của riêng nó và EAR sẽ được đóng gói với Wars gầy và mỗi phụ thuộc bên trong thư mục lib
Cập nhật:
Hãy nhớ rằng thư mục ear/lib không thể được sử dụng cho mỗi jar phụ thuộc trong một Container nghiêm ngặt như JBoss EAP 6. Các thư viện thành phần JSF như tomahawk, các nguyên tố, v.v ... phải để lại e trong thư mục WEB-INF/lib.
Một cách thuận tiện để đạt được điều này với các giải pháp mô tả ở trên là làm cho một loại trừ cho các thư viện thành phần trong tai pom.xml như thế này:
...
<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>
...
Bây giờ mỗi phụ thuộc của WAR sẽ được đặt trong ear/lib ngoại trừ thư viện thành phần sẽ được đặt trong WEB-INF/lib bên trong WAR
Vì vậy, sau khi chúng ta tạo commons-jars.jar, chúng ta có nên thêm điều này vào 1) server/default/lib hoặc 2) root của tai không? – Rips
KHÔNG phải là cách tốt nhất để đi, xem câu trả lời tiếp theo! – Christophe
@toefel vui lòng xác định câu trả lời "tiếp theo". Câu trả lời của WHOM hoặc một liên kết sẽ hữu ích, bởi vì họ có thể chuyển đổi địa điểm dựa trên phiếu bầu. – Ben