webentwicklung-frage-antwort-db.com.de

unerwartete Ausnahme: Java.lang.NoClassDefFoundError: org/Apache/log4j/LogManager

Ich entwickle eine GWT-Anwendung. Es verwendet RPC, um Informationen aus einem internen System zu sammeln. Dies geschieht mithilfe eines Bibliotheksglases, nennen wir es alpha.jar. Wir verwenden dieses Glas in vielen Anwendungen, so dass es gut funktioniert, und übrigens es ist mit ANT außerhalb von Eclipse gebaut.

Einige Klassen in alpha.jar beziehen sich auf LOG4J2 und auch auf viele andere externe Jars, also wenn wir eine Anwendung ausführen, übergeben wir allen einen Klassenpfad, und alles funktioniert gut. Bitte beachten Sie, dass dies kein einfaches Anfängerproblem ist. Die alpha.jar funktioniert wie erwartet, einschließlich Aufrufe von Log4J.

Das Problem:

In Eclipse habe ich dieses GWT-Anwendungsprojekt und auch das Alpha.jar-Projekt (natürlich mit Quellcode). Der Serverteil muss Alpha-Objekte einrichten und mit dem Alphasystem kommunizieren.

Wenn Sie dies in GWT tun, indem Sie dem Alpha-Projekt eine Build-Path-Referenz hinzufügen, wird meine GWT-App problemlos ausgeführt.

Wenn ich anstelle der Projektreferenz (in war/WEB-INF/lib) die alpha.jar einführe und die App ausführt, erhalte ich den Fehler im Titel, wenn ich zum ersten Mal eine Klasse von alpha.jar instanziiere.

Es gibt keine Besonderheiten beim Aufbau des alpha.jar, also sollte es im Grunde dasselbe sein wie das Projekt in Eclipse, oder?

Beachten Sie das Folgende:

*) Die abhängigen Gläser der alpha.jar befinden sich ebenfalls in krieg/WEB-INF/lib. log4j2-core, log4j-api sowie eine Reihe anderer (zB Apache)

*) Wenn ich die alpha.jar (und den Code, der sie ruft) entferne und stattdessen nur Code mit dem Namen LOG4J2 hinzufüge, funktioniert dieser Code auch gut!

Wie kommt es, dass ich diesen seltsamen Fehler beim Verwenden des JARs bekomme? Beachten Sie auch das NoClassDefFoundError, nicht die allgemeinere ClassNotFoundException. Pls see Welche Ursachen und Unterschiede gibt es zwischen NoClassDefFoundError und ClassNotFoundException?

Wenn Sie weitere Informationen benötigen, lassen Sie es mich wissen.

8
Peter Andersson

org.Apache.log4j.LogManager ist eine Klasse aus log4j 1.2 (nicht log4j2).

Daher muss eine Ihrer Web-App-Dosen darauf verweisen. Der Täter sollte in der Stapelverfolgung sichtbar sein.

Je nach Ihren Umständen möchten Sie möglicherweise nur eine log4j 1.2-Dose zur Web-App hinzufügen, da beide Versionen völlig unabhängig voneinander sind.

12
Steve C

Wenn Sie log4j 2 verwenden, vergessen Sie nicht, log4 j2 . Xml anstelle von log4j.xml zu nennen

0
albgorski

wie zuvor erwähnt:

org.Apache.log4j.LogManager ist eine Klasse aus log4j 1.2 (nicht log4j2).

dieses Problem tritt möglicherweise auf, wenn Sie log4j 1.2 und log4j 2.x kombinieren. Sie müssen also Bridge-API zu Ihrem Projekt hinzufügen.

dies ist ein Migrating Problem.

füge diese zu dir hinzu pom.xml

        <log4j2.version>2.7</log4j2.version>
        <disruptor.version>3.3.6</disruptor.version>

        <!--log4j2 dependencies -->
        <dependency>
            <groupId>org.Apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
        <dependency>
            <groupId>org.Apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
        <dependency>
            <groupId>org.Apache.logging.log4j</groupId>
            <artifactId>log4j-1.2-api</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
        <dependency>
            <groupId>org.Apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
        <dependency>
            <groupId>org.Apache.logging.log4j</groupId>
            <artifactId>log4j-jcl</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
        <dependency>
            <groupId>com.lmax</groupId>
            <artifactId>disruptor</artifactId>
            <version>${disruptor.version}</version>
        </dependency>

dann könnten Sie mvn dependency:resolve verwenden, um kein log4j zu sehen. 1.2 

[INFO] The following files have been resolved:
[INFO]    org.springframework.data:spring-data-redis:jar:1.7.2.RELEASE:compile
[INFO]    org.Apache.logging.log4j:log4j-api:jar:2.7:compile
[INFO]    org.Apache.logging.log4j:log4j-slf4j-impl:jar:2.7:compile
[INFO]    com.lmax:disruptor:jar:3.3.6:compile
[INFO]    org.Apache.logging.log4j:log4j-1.2-api:jar:2.7:compile
[INFO]    javax.mail:mail:jar:1.4.5:compile
[INFO]    org.springframework:spring-tx:jar:4.3.1.RELEASE:compile
[INFO]    org.Apache.logging.log4j:log4j-core:jar:2.7:compile
[INFO]    org.Apache.logging.log4j:log4j-jcl:jar:2.7:compile
[INFO]    javax.activation:activation:jar:1.1:compile
[INFO]    org.springframework:spring-beans:jar:4.3.1.RELEASE:compile
[INFO]    org.springframework:spring-web:jar:4.3.1.RELEASE:compile
[INFO]    org.springframework:spring-webmvc:jar:4.3.1.RELEASE:compile
[INFO]    org.springframework:spring-oxm:jar:4.2.6.RELEASE:compile
[INFO]    org.springframework:spring-jdbc:jar:4.3.1.RELEASE:compile
[INFO]    com.alibaba:fastjson:jar:1.2.4:compile
[INFO]    mysql:mysql-connector-Java:jar:5.1.21:compile
[INFO]    org.Apache.Tomcat:tomcat-servlet-api:jar:7.0.54:provided
[INFO]    org.slf4j:slf4j-api:jar:1.7.21:compile
[INFO]    org.springframework:spring-context-support:jar:4.3.1.RELEASE:compile
[INFO]    commons-beanutils:commons-beanutils:jar:1.8.3:compile
[INFO]    org.springframework:spring-context:jar:4.3.1.RELEASE:compile
[INFO]    org.hamcrest:hamcrest-core:jar:1.3:test
[INFO]    redis.clients:jedis:jar:2.8.1:compile
[INFO]    org.springframework:spring-expression:jar:4.3.1.RELEASE:compile
[INFO]    org.springframework.data:spring-data-commons:jar:1.12.2.RELEASE:compile
[INFO]    org.springframework.data:spring-data-keyvalue:jar:1.1.2.RELEASE:compile
[INFO]    junit:junit:jar:4.12:test
[INFO]    org.springframework:spring-core:jar:4.3.1.RELEASE:compile
[INFO]    commons-logging:commons-logging:jar:1.2:compile
[INFO]    org.springframework:spring-aop:jar:4.3.1.RELEASE:compile
[INFO]    org.Apache.commons:commons-pool2:jar:2.4.2:compile
[INFO]    org.slf4j:jcl-over-slf4j:jar:1.7.21:runtime

bezieht sich auf:

0
Mark Simon