2014-10-13 16 views
6

Tôi đang phát triển một ứng dụng GWT. Nó đang sử dụng RPC để thu thập thông tin từ một hệ thống nội bộ. Nó làm như vậy bằng cách sử dụng một thư viện jar, cho phép gọi nó là alpha.jar. Chúng tôi đang sử dụng jar này trong nhiều ứng dụng để nó hoạt động tốt, và btw của nó được xây dựng với ANT, bên ngoài nhật thực.ngoại lệ không mong muốn: java.lang.NoClassDefFoundError: org/apache/log4j/LogManager

Một số lớp trong tham chiếu alpha.jar LOG4J2 và cũng có rất nhiều các thẻ bên ngoài khác, vì vậy khi chúng tôi chạy một ứng dụng, chúng tôi chuyển một đường dẫn tới tất cả mọi thứ và mọi thứ hoạt động tốt. Xin lưu ý rằng đây không phải là vấn đề người mới bắt đầu đơn giản. Bản alpha.jar đang hoạt động như mong muốn, bao gồm cả các cuộc gọi tới Log4J.

Vấn đề:

Trong Eclipse, tôi có dự án này GWT ứng dụng và cũng là dự án Alpha.jar (với mã nguồn của khóa học). Phần máy chủ cần instatiate các đối tượng alpha và giao tiếp với hệ thống alpha.

Khi thực hiện việc này trong GWT bằng cách thêm tham chiếu đường dẫn xây dựng vào dự án Alpha, ứng dụng GWT của tôi chạy tốt.

Khi tôi thay vì tham chiếu dự án bao gồm (trong chiến tranh/WEB-INF/lib) alpha.jar và chạy ứng dụng, tôi nhận được lỗi trong tiêu đề lần đầu tiên tôi khởi tạo lớp từ alpha.jar.

Không có đặc thù nào về cách alpha.jar được xây dựng, vì vậy về cơ bản nó phải giống như dự án trong nhật thực, phải không?

Lưu ý những điều sau:

*) lọ phụ thuộc của alpha.jar cũng nằm trong chiến tranh/WEB-INF/lib. log4j2-core, log4j-api cũng như một loạt những người khác (ví dụ như apache)

*) Nếu tôi xóa alpha.jar (và mã gọi nó) và thay vào đó chỉ cần thêm mã gọi là LOG4J2, mã đó cũng hoạt động tốt!

Làm cách nào để nhận được lỗi lạ khi sử dụng JAR ?? Cũng lưu ý NoClassDefFoundError, nó không phải là ClassNotFoundException phổ biến hơn. Vui lòng xem What causes and what are the differences between NoClassDefFoundError and ClassNotFoundException?

Nếu bạn cần thêm thông tin, hãy cho tôi biết.

+0

bạn có thể cung cấp xây dựng kịch bản của bạn ... có lẽ bạn đang thiếu một sự phụ thuộc Log4J cần thiết để đăng nhập tin nhắn. Và kiểm tra thời gian chạy/SDK Java của bạn trong Eclipse và Ant (phải giống nhau) – Drejc

+0

Không, tôi không thiếu phụ thuộc. Vui lòng đọc lại câu hỏi. –

+0

Xin lỗi nhưng từ mô tả về vấn đề của bạn, tôi không thể hiểu chính xác bạn đang làm gì và vấn đề ở đâu - do đó không ai trả lời câu hỏi của bạn cho đến nay. – Drejc

Trả lời

8

org.apache.log4j.LogManager là một lớp từ log4j 1.2 (không phải log4j2).

Do đó, một trong các lọ ứng dụng web của bạn phải tham chiếu đến nó. Thủ phạm sẽ hiển thị trong dấu vết ngăn xếp.

Tùy thuộc vào hoàn cảnh của bạn, bạn có thể chỉ cần thêm một log4j 1.2 jar vào ứng dụng web vì hai phiên bản hoàn toàn độc lập với nhau.

+0

Âm thanh rất hứa hẹn, tôi đã bỏ lỡ nó nói log4j và không log4j2! Tôi có thể thêm 1.2 (nhưng muốn tránh nó). Làm thế nào tôi có thể tìm ra JAR đang tham chiếu 1,2 ?? Trong các ứng dụng không phải GWT khác, thư mục "lib" của chúng tôi chỉ chứa log4j2-core.jar và log4j-api.jar và tôi không nhận ngoại lệ này ở đó? Và tại sao tôi không thấy vấn đề này khi sử dụng tham chiếu dự án trong Eclipse, tôi chắc chắn không sử dụng 1.2 ở bất cứ đâu. –

+0

Bạn có thể muốn xem lại điều đó ... –

0

Nếu bạn có sử dụng log4j 2 xin đừng quên đặt tên log4 bạn j2 .xml thay vì log4j.xml

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