2014-10-13 11 views
6

Zajmuję się tworzeniem aplikacji GWT. Używa RPC do zbierania informacji z wewnętrznego systemu. Robi to przy użyciu słoika bibliotecznego, nazwijmy go alfa.jar. Używamy tego słoika w wielu aplikacjach, więc działa dobrze, a jego konstrukcja jest wykonana z ANT, poza zaćmieniem.nieoczekiwany wyjątek: java.lang.NoClassDefFoundError: org/apache/log4j/LogManager

Niektóre zajęcia w alpha.jar referencje LOG4J2 a także wiele innych słoików zewnętrznych, tak kiedy uruchomić aplikację mijamy ścieżkę klasy do tych wszystkich, i wszystko działa poza drobnym. Należy pamiętać, że nie jest to prosty problem dla początkujących. Plik alpha.jar działa tak, jak powinien, w tym wywołania Log4J.

Problem:

W Eclipse, mam ten projekt aplikacji GWT, a także projektu Alpha.jar (z kodem źródłowym oczywiście). Część serwera musi inicjować obiekty alfa i komunikować się z systemem alfa.

Kiedy robimy to w GWT, dodając odniesienie do ścieżki budowania do projektu Alpha, moja aplikacja GWT działa dobrze.

Kiedy zamiast odniesienia do projektu dołączam (w wojnie/WEB-INF/lib) plik alpha.jar i uruchamia aplikację, otrzymuję błąd w tytule za pierwszym razem, gdy utworzę instancję klasy z pliku alpha.jar.

Nie ma żadnych osobliwości w sposobie budowania pliku alpha.jar, więc w zasadzie powinno to być to samo, co projekt w czasie zaćmienia, prawda?

Uwaga następujące:

*) słoiki na alpha.jar zależne są także w czasie wojny/WEB-INF/lib. log4j2-core, log4j-api oraz kilka innych (np. apache)

*) Jeśli usunę plik alpha.jar (i kod, który go wywołuje) i zamiast niego dodaję kod, który nazywa się LOG4J2, ten kod działa również dobrze!

Jak mogę uzyskać ten dziwny błąd podczas używania JAR? Zauważ także NoClassDefFoundError, nie jest to bardziej popularny wyjątek ClassNotFoundException. Pls see What causes and what are the differences between NoClassDefFoundError and ClassNotFoundException?

Jeśli potrzebujesz więcej informacji, daj mi znać.

+0

można podać swój skrypt kompilacji ... jesteś prawdopodobnie brakuje zależność log4j potrzebne do zalogowania wiadomości. I sprawdź środowisko wykonawcze Java/SDK w środowiskach Eclipse i Ant (powinno być takie samo). – Drejc

+0

Nie. Nie brakuje mi zależności. Proszę ponownie przeczytać pytanie. –

+0

Przykro mi, ale z opisu twojego problemu nie jestem w stanie zrozumieć, co dokładnie robisz i gdzie jest problem - w związku z tym nikt nie odpowiedział na twoje pytanie do tej pory. – Drejc

Odpowiedz

8

org.apache.log4j.LogManager to klasa z log4j 1.2 (nie log4j2).

Dlatego jeden ze słoików aplikacji internetowych musi się do niego odwoływać. Winowajca powinien być widoczny na śladzie stosu.

W zależności od okoliczności może być konieczne dodanie słoika log4j 1.2 do aplikacji internetowej, ponieważ obie wersje są całkowicie niezależne od siebie.

+0

Brzmi bardzo obiecująco, brakowało mi, że powiedział log4j, a nie log4j2! Mogę dodać 1.2 (ale chciałbym tego uniknąć). Jak mogę się dowiedzieć, który JAR odwołuje się do 1.2? W innych aplikacjach innych niż GWT nasz katalog "lib" zawiera tylko log4j2-core.jar i log4j-api.jar i nie dostaję tam tego wyjątku? I dlaczego nie widzę tego problemu podczas korzystania z Project-reference w Eclipse, z pewnością nie używam 1.2 wszędzie. –

+0

Możesz chcieć spojrzeć na to jeszcze raz ... –

0

Jeśli masz stosowanie log4j 2 proszę nie zapominać, aby wymienić swoją log4 J2 .xml zamiast log4j.xml

Powiązane problemy