web-dev-qa-db-fra.com

exception inattendue: Java.lang.NoClassDefFoundError: org/Apache/log4j/LogManager

Je développe une application GWT. Il utilise RPC pour collecter des informations à partir d'un système interne. Pour ce faire, utilisez un fichier jar de bibliothèque, appelons-le alpha.jar. Nous utilisons ce bocal dans de nombreuses applications, de sorte qu'il fonctionne correctement et qu'il est construit avec ANT, en dehors d'Eclipse.

Certaines classes d'alpha.jar font référence à LOG4J2 et à de nombreux autres fichiers JAR externes, donc lorsque nous exécutons une application, nous transmettons un chemin d'accès aux classes, et tout se passe bien. S'il vous plaît noter que ce n'est pas un simple problème de débutant. Le fichier alpha.jar fonctionne correctement, y compris les appels à Log4J.

Le problème:

Dans Eclipse, j'ai ce projet d'application GWT ainsi que le projet Alpha.jar (avec le code source bien sûr). La partie serveur doit créer des objets alpha et communiquer avec le système alpha.

Quand cela se produit dans GWT en ajoutant une référence de chemin de construction au projet Alpha, mon application GWT s'exécute correctement.

Lorsque, au lieu de la référence du projet, j'inclus (dans war/WEB-INF/lib) le fichier alpha.jar et l'exécution de l'application, l'erreur apparaît dans le titre la première fois que j'instancie une classe à partir de alpha.jar.

Il n'y a pas de particularité dans la façon dont l'alpha.jar est construit, il devrait donc être fondamentalement la même chose que le projet dans Eclipse, non?

Notez les points suivants:

*) Les fichiers dépendants de l'alpha.jar sont également en guerre/WEB-INF/lib. log4j2-core, log4j-api et bien d'autres (Apache commun par exemple)

*) Si je supprime le fichier alpha.jar (et le code qui l’appelle) et que j’ajoute simplement du code appelé LOG4J2, ce code fonctionne également très bien!

Comment se fait-il que je reçoive cette erreur étrange lors de l'utilisation du fichier JAR? Notez également le NoClassDefFoundError, ce n'est pas la plus commune des ClassNotFoundException. Pls voir Quelles sont les causes et quelles sont les différences entre NoClassDefFoundError et ClassNotFoundException?

Si vous avez besoin de plus d'info laissez-moi savoir.

8
Peter Andersson

org.Apache.log4j.LogManager est une classe de log4j 1.2 (pas log4j2).

Par conséquent, l'un des fichiers jar de vos applications Web doit être référencé. Le coupable doit être visible dans la trace de la pile.

Selon vos circonstances, vous pouvez simplement ajouter un fichier jar log4j 1.2 à l'application Web, car les deux versions sont complètement indépendantes.

12
Steve C

Si vous avez utilisé log4j 2, n’oubliez pas de nommer votre log4 j2 . Xml au lieu de log4j.xml

0
albgorski

comme indiqué précédemment:

org.Apache.log4j.LogManager est une classe de log4j 1.2 (pas log4j2).

ce problème se rencontre lorsque vous combinez utiliser log4j 1.2 et log4j 2.x, peut-être. vous devez donc ajouter un pont api à votre projet.

c'est un problème Migrating.

ajouter ceux-ci 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>

alors, vous pourriez utiliser mvn dependency:resolve pour ne voir aucun 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

fait référence:

0
Mark Simon