Tôi đã sử dụng plugin maven-ear với plugin maven-war-plugin và maven-ejb-plugin để triển khai thành công và chạy một ứng dụng được đóng gói EAR đến Jboss AS7.Cách thiết lập đường dẫn lớp manifest đúng cách trong maven-war-plugin
.
|-- META-INF
| |-- application.xml
| |-- MANIFEST.MF
| `-- maven
| `-- com.patrac
| `-- Patrac-ear
| |-- pom.properties
| `-- pom.xml
|-- Patrac-ejb-1.0-SNAPSHOT.jar
`-- Patrac-web-1.0-SNAPSHOT.war
Trong thư mục mã nguồn ứng dụng, poms nằm như sau:
.
|
|-- Patrac-ear
| `-- pom.xml
|-- Patrac-ejb
| `-- pom.xml
|-- Patrac-web
| `-- pom.xml
`-- pom.xml
tôi không thể tìm ra cách để ngăn chặn một vài thông điệp cảnh báo khó chịu khi tôi triển khai ứng dụng:
!12:32:03,958 WARN [org.jboss.as.server.deployment] (MSC service thread 1-2) Class Path entry richfaces-components-ui-4.0.0.Final.jar in "/content/Patrac.ear/Patrac-web-1.0-SNAPSHOT.war" does not point to a valid jar for a Class-Path reference.
12:32:03,970 WARN [org.jboss.as.server.deployment] (MSC service thread 1-2) Class Path entry richfaces-components-api-4.0.0.Final.jar in "/content/Patrac.ear/Patrac-web-1.0-SNAPSHOT.war" does not point to a valid jar for a Class-Path reference.
12:32:03,984 WARN [org.jboss.as.server.deployment] (MSC service thread 1-2) Class Path entry richfaces-core-api-4.0.0.Final.jar in "/content/Patrac.ear/Patrac-web-1.0-SNAPSHOT.war" does not point to a valid jar for a Class-Path reference.
12:32:03,989 WARN [org.jboss.as.server.deployment] (MSC service thread 1-2) Class Path entry richfaces-core-impl-4.0.0.Final.jar in "/content/Patrac.ear/Patrac-web-1.0-SNAPSHOT.war" does not point to a valid jar for a Class-Path reference.
Patrac-web-1,0-SNAPSHOT.war META-INF/MANIFEST.MF trông như thế này:
Manifest-Version: 1.0
Built-By: pgarner
Build-Jdk: 1.7.0_02
Class-Path: Patrac-ejb-1.0-SNAPSHOT.jar richfaces-components-ui-4.0.0.
Final.jar richfaces-components-api-4.0.0.Final.jar richfaces-core-api
-4.0.0.Final.jar richfaces-core-impl-4.0.0.Final.jar cssparser-0.9.5.
jar sac-1.3.jar guava-r08.jar
Created-By: Apache Maven
Archiver-Version: Plexus Archiver
Mục nhập lớp ejb cần phải có mặt cho mô-đun EJB, cho tính di động và các mục nhập đường dẫn lớp richfaces, cssparser và ổi không được nằm trong tệp kê khai của WAR.
Vấn đề là WAR của tôi phụ thuộc vào tất cả các JAR, một số trong số đó sống trong WEB-INF/lib
(RichFaces) và một JAR, Patrac-ejb-1.0-SNAPSHOT.jar
, nằm trong thư mục gốc của EAR. Mỗi phụ thuộc cần phải được nhập vào Patrac-web/pom.xml nhưng KHÔNG phải mỗi phụ thuộc sẽ xuất hiện trong tệp kê khai.
Maven đặt các JAR vào đúng vị trí, nhưng nó đặt các mục nhập Class-Path cho TẤT CẢ các JAR vào tệp kê khai. Nó không nên làm điều này. CHỈ nên đặt một mục nhập cho Patrac-ejb-1.0-SNAPSHOT.jar
.
<!--
According to Java EE 6 spec, the application is portable if
Patrac-web.war's META-INF/MANIFEST.MF contains a Class-Path entry
for Patrac-ejb-1.0-SNAPSHOT.jar.
<optional>true</optional> is the flag that maven-war-plugin uses
to put the entry in MANIFEST.MF without copying Patrac-ejb-1.0-SNAPSHOT.jar
into WEB-INF/lib. This is what I want.
<scope>provided</scope> would cause maven-war-plugin to NEITHER
put the entry in MANIFEST.MF nor copy Patrac-ejb.jar into WEB-INF/lib,
which would not be good.
No tag at all would cause maven-war-plugin to BOTH put the entry in
MANIFEST.MF and copy Patrac-ejb.jar into WEB-INF/lib, which would
also not be good.
-->
<dependency>
<groupId>com.patrac</groupId>
<artifactId>Patrac-ejb</artifactId>
<type>ejb</type>
<optional>true</optional>
</dependency>
<!--
These two dependencies are used to copy
the other JAR files into WEB-INF/lib and there
should not be any class-path entries for such
JARs in MANIFEST.MF, in order to avoid the
error messages.
-->
<dependency>
<groupId>org.richfaces.ui</groupId>
<artifactId>richfaces-components-ui</artifactId>
</dependency>
<dependency>
<groupId>org.richfaces.core</groupId>
<artifactId>richfaces-core-impl</artifactId>
</dependency>
Tôi đang sử dụng phiên bản plugin maven-war-plugin gần đây nhất, 2.2. Làm thế nào để tôi nói maven-war-plugin để đặt các JAR "non-ejb" vào WEB-INF/lib trong khi không đặt các mục nhập class-path trong MANIFEST.MF?
Bất kỳ lời khuyên hoặc con trỏ nào bạn có được đánh giá cao.
Tài liệu tham khảo:
các [War manifest dẫn] (http: // Mave n.apache.org/plugins/maven-war-plugin/examples/war-manifest-guide.html) hiển thị 3 ví dụ và cung cấp ghi chú: "Không có cách nào được hiển thị cách bao gồm một phụ thuộc trong WEB-INF/lib nhưng không có trong đường dẫn lớp kê khai." Hướng dẫn sau đó nói, "Kiểm tra [Hướng dẫn làm việc với các tệp kê khai] (http://maven.apache.org/guides/mini/guide-manifest.html) để biết thêm ví dụ." Trang thứ hai này chỉ đơn giản giới thiệu tôi trở lại trang hướng dẫn tệp kê khai WAR. Tôi cần để có thể làm theo các ví dụ đó không được hiển thị. –
Bạn muốn bao gồm một phụ thuộc trong WEB-INF/lib nhưng không bao gồm trong classpath manifest? Tại sao bạn cần điều đó? Nếu 'richfaces',' cssparser' và 'guava' của bạn để lại trong EAR, thì những phụ thuộc này sẽ được đánh dấu là' được cung cấp'. –
Richfaces và cộng sự là các phụ thuộc bắt buộc của mô-đun WAR. Vì vậy, chúng phải ở trong WEB-INF/lib. Sự hiểu biết của tôi là không có mục Class-Path nào cần được thực hiện cho các JAR trong WEB-INF vì các tệp đó sẽ được tải tự động bởi trình nạp lớp của WAR. Chỉ có các mục nhập Class-Path cho các JAR _external_ cho mô-đun WAR cần được nhập vào tệp kê khai của WAR. Trong trường hợp của tôi, một mục nhập phải được thực hiện cho JJ EJB. Đây là thông số kỹ thuật của JEE. RichFaces và cộng sự là các phụ thuộc bắt buộc của mô đun WAR và do đó không được đánh dấu là 'được cung cấp'. –