web-dev-qa-db-ja.com

予期しない例外:Java.lang.NoClassDefFoundError:org / Apache / log4j / LogManager

GWTアプリケーションを開発しています。 RPCを使用して、内部システムから情報を収集しています。ライブラリjarを使用してこれを行い、alpha.jarと呼びます。このjarを多くのアプリケーションで使用しているため、正常に機能し、Eclipseの外部でANTを使用してビルドされます。

Alpha.jarの一部のクラスはLOG4J2を参照し、他の多くの外部jarも参照するため、アプリケーションを実行すると、すべてにクラスパスが渡され、すべて正常に機能します。これは単純な初心者の問題ではないことに注意してください。 alpha.jarは、Log4Jへの呼び出しを含め、正常に機能しています。

問題:

Eclipseには、このGWTアプリケーションプロジェクトがあり、Alpha.jarプロジェクトもあります(もちろんソースコード付き)。サーバー部分は、アルファオブジェクトをインスタンス化し、アルファシステムと通信する必要があります。

Build-path-referenceをAlphaプロジェクトに追加してGWTでこれを行うと、GWTアプリが正常に実行されます。

プロジェクト参照の代わりにalpha.jarを(war/WEB-INF/libに)含めてアプリを実行すると、alpha.jarからクラスを初めてインスタンス化するときにタイトルにエラーが表示されます。

Alpha.jarの作成方法に特殊性はないため、基本的にはEclipseのプロジェクトと同じものである必要がありますか?

次のことに注意してください。

*)alpha.jarの依存jarもwar/WEB-INF/libにあります。 log4j2-core、log4j-api、およびその他の束(たとえば、Apache共通)

*)alpha.jar(およびそれを呼び出すコード)を削除し、代わりにLOG4J2を呼び出すコードを追加するだけで、そのコードも正常に機能します!

JARを使用しているときにこの奇妙なエラーが発生するのはなぜですか?また、より一般的なClassNotFoundExceptionではなく、NoClassDefFoundErrorにも注意してください。 Pls参照 NoClassDefFoundErrorとClassNotFoundExceptionの原因と違いは何ですか?

さらに情報が必要な場合はお知らせください。

10
Peter Andersson

org.Apache.log4j.LogManagerはlog4j 1.2のクラスです(log4j2ではありません)。

したがって、Webアプリjarの1つがそれを参照している必要があります。犯人はスタックトレースに表示されるはずです。

2つのバージョンは互いに完全に独立しているため、状況によっては、log4j 1.2 jarをWebアプリに追加することもできます。

13
Steve C

Log4j 2を使用している場合は、log4j.xmlではなくlog4 -j2。xmlの名前を忘れないでください。

0
albgorski

前述のとおり:

org.Apache.log4j.LogManagerは、log4j 1.2からのクラスです(log4j2ではありません)。

この問題は、log4j 1.2とlog4j 2.xを組み合わせて使用​​すると解決します。そのため、ブリッジAPIをプロジェクトに追加する必要があります。

これはMigratingの問題です。

それらをあなたに追加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>

次に、mvn dependency:resolveを使用して、log4j 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

参照:

0
Mark Simon