2013-03-20 35 views
13

Tôi muốn có một dự án Java JEE6 xây dựng với maven, và tôi muốn nó chuẩnMaven: JavaEE-api vs JBoss-JavaEE-6.0

Vì vậy, tôi đặt điều này trong pom.xml của tôi:

<dependency> 
    <groupId>javax</groupId> 
    <artifactId>javaee-api</artifactId> 
    <version>6.0</version> 
    <scope>provided</scope> 
</dependency> 

Một dự án như thế này, nó là vụ phải chạy trong mỗi container JEE6 tương thích (JBoss, Geronimo, glashfish, vv)

Sau đó, tại sao phụ thuộc JBoss này tồn tại?

<dependency> 
    <groupId>org.jboss.spec</groupId> 
    <artifactId>jboss-javaee-6.0</artifactId> 
    <version>3.0.2.Final</version> 
    <scope>provided</scope> 
</dependency> 

Nếu tôi sử dụng nó, tôi có bị ràng buộc với jboss vì vậy tôi chỉ có thể sử dụng máy chủ này với ứng dụng này?

Bạn không nên sử dụng javaee-api chuẩn?

Cảm ơn bạn!

Trả lời

19

Api chuẩn bị làm tê liệt, i. e. cơ quan phương pháp bị thiếu. Điều này hóa ra khi thử nghiệm. Tôi đã một lần chạy vào pitfall này và không phải là rất hạnh phúc với nó.

Do đó, bạn nên sử dụng gói khác làm tham chiếu.

Bạn có thể có một cái nhìn gần hơn về Adam Biens Blog

Bạn cũng có thể làm hồ sơ cho các môi trường triển khai khác nhau nếu bạn thực sự cần. Tuy nhiên, về cơ bản tôi đồng ý, điều này thật đáng buồn không phải là một hoàn cảnh rất dễ chịu.

Để gặp sự cố khi kiểm tra, bạn có thể xem this thread.

Chỉnh sửa:
Nhân tiện, kể từ bây giờ, điều này có thể liên quan đến nhau. Vấn đề này đã biến mất cho api javaee- (web-) cho Java EE 7 (source)

+4

Lưu ý rằng phụ thuộc 'org.jboss.spec' chỉ phụ thuộc vào API. Họ không theo bất kỳ cách nào buộc bạn các nền tảng JBoss. –

+0

Để tham khảo trong tương lai - Lỗi sau xảy ra rất thường xuyên với nghịch lý này. 'java.lang.ClassFormatError: Thuộc tính mã vắng mặt trong phương thức không phải là bản địa hoặc trừu tượng trong tệp lớp' –

2

Các giải pháp đầu tiên với sự phụ thuộc java-api là đúng cách: ứng dụng của bạn trong trường hợp lý tưởng không nên quan tâm đến máy chủ môi trường theo những gì nó hoạt động. Đối với thử nghiệm đơn vị, bạn có thể sử dụng Arquillian, giúp bạn kiểm tra các hạt doanh nghiệp tại "nhà" mà không bị đau đầu. Nếu bạn đang sử dụng jboss-javaee, bạn có chắc chắn rằng ứng dụng của bạn sẽ triển khai và hoạt động tốt trên một máy chủ khác, hơn là jboss?

Các vấn đề liên quan