2008-11-28 25 views
10

Vì vậy, tôi bắt đầu với một dự án dịch vụ web (chỉ là một dự án web động) mà xây dựng và gỡ lỗi chính xác từ nhật thực. Chúng tôi đã lấy một đoạn mã chung mà chúng tôi muốn đưa vào một thư viện được chia sẻ để bây giờ các lớp đó sẽ đi vào một dự án jar riêng biệt mà tham chiếu dự án web.Vấn đề đường dẫn gỡ lỗi thời gian gỡ lỗi Eclipse: Làm thế nào để bạn đưa đầu ra của dự án phụ thuộc vào đường dẫn lớp thời gian chạy của dự án web?

Trên dự án web, tôi đã thực hiện Project-> Properties-> Java Build Path-> Projects-> Thêm và thêm dự án jar. Và điều này giải quyết một cách chính xác tất cả các vấn đề classpath thời gian biên dịch và mọi thứ đều tốt đẹp. Nhưng khi chạy, khi máy chủ tomcat kích hoạt, spring cố gắng tiêm một số lớp chứa trong tệp jar và tôi nhận được NoClassDefFoundError.

Tệp .class và thuộc tính của tôi và nội dung của thư mục META-INF của tôi hiển thị trong thư mục ./build, nhưng thư mục WEB-INF/lib của tôi dường như được tham chiếu tại chỗ và phụ thuộc jar không không được sao chép vào nó để hiển thị như một phần của Thư viện ứng dụng web.

Câu thần chú huyền diệu là gì để nói nhật thực rằng dự án jar khác cần phải có sẵn cho tomcat khi chạy? Từ kịch bản kiến ​​xây dựng của chúng tôi, trước tiên chúng tôi chỉ xây dựng dự án khác vào WEB-INF/lib và mọi thứ hoạt động tốt, nhưng không phải để gỡ lỗi nhật thực.

Trả lời

9

Phụ thuộc vào mô-đun Java EE sẽ giải quyết vấn đề này. Bạn đã thực hiện nhiệm vụ trích xuất các lớp phổ biến của mình vào dự án riêng của mình, có thể là vì các dự án khác phụ thuộc vào các lớp này. Dù bằng cách nào, bạn sẽ phải đảm bảo rằng đây là một dự án Tiện ích (xuất hiện trong Java EE trong trình thủ thuật dự án), và không chỉ là một dự án Java đơn giản. Một bước được thực hiện, bạn có thể tiến hành thêm dự án Tiện ích vào đường dẫn xây dựng của bạn (đường dẫn biên dịch) như bạn đã tìm ra. Bước bổ sung (cuối cùng) là thiết lập sự phụ thuộc vào mô-đun Java EE giữa dự án Web động của bạn và thư viện được chia sẻ, làm cho các lớp của tiện ích được đặt trong WEB-INF \ lib trong quá trình triển khai và thậm chí trong quá trình xuất chiến tranh. Để làm như vậy, hãy truy cập thuộc tính của dự án web động và duyệt đến các phụ thuộc của mô-đun Java EE. Đảm bảo rằng dự án tiện ích của bạn được chọn ở đây. Redeploy/xuất bản ứng dụng của bạn và bạn nên được tốt để đi.

+0

Điều đó dường như đã thực hiện thủ thuật, nhưng tôi không chắc chắn về những gì bạn đang nói về nó là một "Tiện ích" dự án. Có cái gì tôi có thể nhìn thấy trong tập tin .project của tôi hoặc trong .settings/mà sẽ cho tôi biết đó là loại phù hợp? –

+0

Các dự án hữu ích là các dự án Java, mặc dù chúng thích hợp hơn cho ngữ cảnh J2EE. Chúng đại diện cho mã của bạn (không phải các JAR của bên thứ ba) được chia sẻ trên nhiều dự án trong Ứng dụng doanh nghiệp của bạn. Thông thường, đây là các lớp được sử dụng trên nhiều EJB và thường là một mô-đun Web đơn. –

+0

Tôi thường không đặt các dự án Tiện ích trong các dự án Java thuần tuý Java, vì các dự án Tiện ích sẽ có các JAR thời gian chạy của Máy chủ tự động được thêm vào đường dẫn lớp. Ví dụ tôi có thể sử dụng datasources từ cùng một dự án mà không cần thêm các JAR của container vào đường dẫn xây dựng. –

10

Tôi đã tìm ra điều này sau khi dành chút thời gian cho nó. Nếu bạn đang sử dụng Eclipse Helios, hãy truy cập properties > deployment assembly > add > project và chọn dự án phụ thuộc mà bạn muốn thêm.

+0

Câu trả lời đúng và hữu ích hơn nếu bạn không sử dụng EAR. –

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