2011-01-19 28 views
15

Tôi muốn đóng gói các lớp web Java EE6 của mình (đậu, bộ lọc, servlets) vào bình và đặt nó vào thư mục /WEB-INF/lib/ cùng với các lọ tiện ích khác và từ bỏ thư mục /WEB-INF/classes/ hoàn toàn./WEB-INF/lib và/WEB-INF/lib

Có sự khác biệt đáng kể nào giữa hai loại về tải trọng lớp học, ngữ cảnh ứng dụng, v.v ... không?

Cảm ơn.

PS: Bất cứ khi nào googling bất kỳ thông số kỹ thuật java tôi luôn luôn chuyển hướng đến chỉ mục tài liệu Oracle mà là chục nhấp chuột đi từ url gốc. Có ai biết chuyện gì đang xảy ra ở đó không?

Trả lời

19

Tôi muốn đi theo số /WEB-INF/classes. Nó cho phép bạn chạy ứng dụng của bạn trong chế độ gỡ lỗi và các lớp trao đổi nóng khi thay đổi. Nếu bạn đóng gói mọi thứ dưới dạng jar, bạn phải đóng gói lại và triển khai lại ứng dụng mỗi khi bạn thay đổi một lớp.

+0

cảm ơn. Nhưng, ngoài việc gỡ lỗi, nó sẽ có chức năng cùng một ứng dụng? – Osw

+1

có. Không có sự khác biệt – Bozho

14

Vâng, ngay: Hãy tưởng tượng bạn có lớp org.example.Test.class, nếu bạn đặt nó vào lọ và trong WEB-INF/lib/ thư mục, và sao chép cùng lớp vào WEB-INF/classes/ sau đó classloader của ứng dụng đó sẽ sử dụng cuối cùng (từ WEB-INF/classes/).

Thỉnh thoảng bạn có thể sử dụng nó làm lợi thế - Tôi có thư viện và có một lỗi ... Tôi tìm nguồn của lớp đó (ở đây là lỗi; tôi nhớ một phần của cách tôi biết lỗi đó là lớp, đó là một câu chuyện khác), tôi thêm lớp đó vào dự án với mã cố định và được biên dịch thành WEB-INF/classes/ trong khi thư viện vẫn tồn tại trong WEB-INF/lib/. Lớp cố định sẽ được sử dụng cho đến khi thư viện được sửa.

+0

Cảm ơn, tính năng này có thể hữu ích. – Osw

+0

Mẹo hữu ích, cảm ơn! – aglassman

0

Định nghĩa vùng chứa Tomcat Servlet: WEB-INF\classes được tìm kiếm trước WEB-INF\lib. Bạn có thể chọn ủy nhiệm việc tải lớp của bạn cho trình nạp lớp tùy chỉnh của bạn - ngay cả khi thứ tự trên được duy trì.

Nếu bạn chọn đi với nhà cung cấp khác, ví dụ: JBOss, Glassfish, Jetty nó có thể có thứ tự khác, nhưng tôi không chắc chắn về những thứ đó.