Obtention de l'exception java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory


188

J'exécute un programme d'injection de dépendance simple du printemps et j'obtiens cette exception. J'ai déjà inclus le fichier common-logging1.1.1.jar et spring.jar. Pourriez-vous s'il vous plaît aider?

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
    at org.springframework.context.support.AbstractApplicationContext.<init>(AbstractApplicationContext.java:119)
    at org.springframework.context.support.AbstractXmlApplicationContext.<init>(AbstractXmlApplicationContext.java:55)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:77)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:65)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:56)
    at com.client.StoryReader.main(StoryReader.java:15)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    ... 6 more

2
Tout d'abord, vérifiez que votre chemin de classe est bien correct. Ensuite, essayez d'ouvrir le fichier jar et vérifiez qu'il contient réellement la classe org.apache.commons.logging.LogFactory. Enfin, essayez le débogage en définissant un point d'arrêt dans le chargeur de classe.
Kolibri

2
Toutes les réponses ci-dessous suggèrent commons-loggingun pas en arrière. Utilisez jcl-over-slf4jplutôt.
opyate

Dans Android, ajoutez testCompile 'commons-logging: commons-logging: 1.1.1' à app.gradle
Roger Garzon Nieto

Réponses:



114

Si vous utilisez maven pour gérer les dépendances, ajoutez la ligne suivante dans votre pom.xml:

<dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.1.1</version>
</dependency>


19

commons-logging-1.1.1.jar ou jcl-over-slf4j-1.7.6.jar al

Si vous utilisez maven, utilisez le code ci-dessous.

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
    <version>${slf4j.version}</version>
</dependency>

2
L'inclusion de "jcl-over-slf4j" était la seule solution qui fonctionne pour moi. J'avais déjà la journalisation commune dans mes dépendances.
Italo Borssatto

J'utilise la version 2.0.1.RELEASE de spring-boot avec maven. C'était la seule solution qui fonctionnait pour moi aussi.
Carlos Nantes

18

J'ai eu le même problème et je l'ai résolu en ajoutant simplement le commons-logging.jarau chemin de classe.


8

L'ajout de commons-logging.jar ou commons-logging-1.1.jar résoudra ce problème ...


6

J'ai déjà inclus common-logging1.1.1.jar et ...

Êtes-vous sûr d'avoir épelé le nom du fichier JAR exactement? Je pense que cela devrait probablement être commons-logging-1.1.1.jar(notez le supplément -dans le nom). Vérifiez également si le nom du répertoire est correct.

NoClassDefFoundError signifie toujours qu'une classe est introuvable, donc très probablement votre chemin de classe n'est pas correct.


2
NoClassDefFoundErrorpeut également être causé par d'autres cas de coin, comme lorsque les initialiseurs de classe échouent dans des circonstances obscures.
skaffman

De plus, s'il obtient une NoClassDefFoundError parce que l'instanciation de classe a échoué, alors il devrait avoir obtenu une exception ExceptionInInitializerError en premier (à moins bien sûr qu'elle n'ait été interceptée silencieusement).
Kolibri

Et n'oubliez pas le "s"commons-logging-1.1.1.jar
Glenn Lawrence

@GlennLawrence Merci, j'ai corrigé le nom.
Jesper

6

Définir la portée de la compilation l'a fait pour moi

<dependency>
  <groupId>commons-logging</groupId>
  <artifactId>commons-logging</artifactId>
  <version>1.2</version>
  <scope>compile</scope>
</dependency>

1
J'ai résolu ma situation. Lors de l'exécution des cas de test Mockito, j'ai eu cette erreur et j'ai résolu cette dépendance dans pom.xml.
venugopal

4

Essayez de nettoyer complètement le répertoire cible / de déploiement de l'application afin de vous débarrasser de tout fichier jar de bibliothèque obsolète. Faites une nouvelle compilation et vérifiez que commons-logging.jar est bien placé dans le bon dossier lib. Il peut ne pas être inclus lorsque vous créez la bibliothèque pour l'application.


4

Problème résolu par l'ajout de commons-logging.jar

Les fichiers Imp sont,

antlr-runtime-3.0.1

org.springframework.aop-3.1.0.M2

org.springframework.asm-3.1.0.M2

org.springframework.aspects-3.1.0.M2

org.springframework.beans-3.1.0.M2

org.springframework.context.support-3.1.0.M2

org.springframework.context-3.1.0.M2

org.springframework.core-3.1.0.M2

org.springframework.expression-3.1.0.M2

commons-logging-1.1.1

3

Deux options (au moins):

  1. Ajoutez le fichier jar de journalisation des communs à votre fichier en le copiant dans un dossier local.

Remarque: la liaison du fichier jar peut entraîner des problèmes avec le serveur et peut-être la raison pour laquelle il est ajouté au chemin de construction mais ne résout pas le problème de démarrage du serveur.

Ne pointez donc pas le pot vers un dossier externe.

OU...

  1. Si vous ne voulez vraiment pas l'ajouter localement parce que vous partagez le fichier jar entre projets, alors ...

Si vous utilisez une instance de serveur tc, vous devez ajouter le fichier jar en tant que fichier jar externe aux configurations d'exécution de l'instance de serveur.

allez à exécuter en tant que, exécutez les configurations ..., {votre instance de serveur tc}, puis l'onglet Chemin de classe.

Ajoutez ensuite le fichier jar de journalisation des communs.


3

J'ai le même problème que toi. Enfin j'ai vérifié la version d'Apache possédant la classe. J'ai trouvé que la version 1.0.4 a la classe.

Essayez d'utiliser la version 1.0.4 au lieu de 1.1.X ou 1.2.X

Mes dépendances:

    <dependencies>
        <dependency>
            <groupId>org.jolokia</groupId>
            <artifactId>jolokia-core</artifactId>
            <version>1.3.5</version>
        </dependency>
        <dependency>
            <groupId>org.jolokia</groupId>
            <artifactId>jolokia-client-java</artifactId>
            <version>1.3.5</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.0.4</version>
        </dependency>
    </dependencies>

Mon code Java

J4pClient j4pClient = new J4pClient("http://localhost:8080/jolokia");
J4pReadRequest req = new J4pReadRequest("java.lang:type=Memory","HeapMemoryUsage");
req.setPath("used");
J4pReadResponse resp = j4pClient.execute(req);
System.out.println(resp.getValue());

Mon résultat:

130489168

Vérifiez également que vos dépendances maven sont bien importées.



0

Vérifiez simplement si le fichier commons-logging.jar a été ajouté à vos bibliothèques et au classpath. J'ai eu le même problème et c'était à cause de cela. dhammikas-


0

J'attribue généralement le classpath à une variable, puis je le vérifie. J'ai écrit un petit script ruby ​​que j'inclus dans mes scripts de démarrage qui valide le chemin de classe avant de lancer java . La validation du classpath avant le démarrage de la JVM m'a fait gagner beaucoup de temps pour résoudre ces types de problèmes.


2
Vous devriez plutôt envisager d'utiliser des outils comme Maven.
Neovibrant

0

Hé, je suivais le tutoriel sur tutorialpoint.com. Ajoutez après avoir terminé Étape 2 - Installation de l'API Apache Common Logging: Vous devez importer des bibliothèques JAR externes dans le projet à partir des fichiers téléchargés à cette étape. Pour moi, le nom du fichier était " commons-logging-1.1.1 ".


0

Si vous exécutez ceci sur Android, notez que le java.beanspackage n'est apparemment pas complet sur Android. Pour tenter de résoudre ce problème sur Android, essayez ce qui suit:

  1. Téléchargez android-java-air-bridge.jar (actuellement le bouton de téléchargement est en bas de page ou lien direct ici )
  2. Copiez le fichier jar téléchargé dans votre répertoire [APPROOT] / app / libs (ou liez le fichier jar de toute autre manière)
  3. Remplacez les import ***déclarations par celles de pont aérien. Par exemple import javadz.beanutils.BeanUtilsau lieu deimport org.apache.commons.beanutils.BeanUtils;
  4. Nettoyer et reconstruire le projet

source 1 , source 2

Je m'excuse car je réalise que cela ne répond pas exactement à la question, bien que cette page SO apparaisse souvent lors de la recherche d' NoClassDefFoundError: Failed resolution of: beanUtilserreurs générées par Android .


0

J'obtenais la même erreur pendant que le pot était présent. Aucune solution n'a fonctionné. Ce qui fonctionnait, c'était la suppression du fichier jar du système de fichiers (du répertoire .m2), puis le nettoyage du projet maven.


0

J'ai le même problème dans l'IDE eclipse, ma solution était: Faites un clic droit dans Mon projet> Propriétés

entrez la description de l'image ici

Cliquez à Maven et écrivez: jar dans le projet Active Maven

entrez la description de l'image ici

Enfin, postulez et fermez


0

Dans mon cas, je testais une application Tomcat dans eclipse et j'ai obtenu cette erreur. Je l'ai résolu en vérifiant le .classpathfichier et j'ai corrigé cette entrée:

<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
    <attributes>
        <attribute name="maven.pomderived" value="true"/>
        <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
    </attributes>
</classpathentry>

L'attribut org.eclipse.jst.component.dependencyétait manquant.


-1

Vérifiez si les fichiers JAR sont correctement importés. Je les ai importés en utilisant le chemin de construction. Mais il n'a pas reconnu le fichier jar dans le dossier WAR / lib. Plus tard, j'ai copié le même fichier jar dans le dossier war / lib . Cela fonctionne bien maintenant. Vous pouvez actualiser / nettoyer votre projet.


-2

Bonjour les amis, si vous obtenez une exception de classe non trouvée dans le code de mise en veille prolongée, c'est le problème des fichiers jar.Il s'agit principalement de deux problèmes
1.Je veux dire que votre ancienne version de mise en veille prolongée peut être la 3.2 ci-dessous. fonctionne bien

2. vérifie d'abord la connexion à la base de données.Si la base de données fonctionne correctement, il s'agissait d'une erreur dans le programme ur ou dans le fichier jar.

veuillez vérifier ces deux problèmes si cela ne fonctionne pas non plus, vous avez essayé d'IDE. J'utilise netbeanside 6.9 version.here hibernate fonctionne bien.vous n'obtenez aucune erreur de la classe, pas d'exception.

J'espère que celui-ci aide plus


-2

La solution consiste à ajouter le fichier jar common-logging.xx


-2

essayez d'ajouter cette dépendance org.apache.commons commons-exec 1.3


-3

Si tout le reste échoue, comme pour moi, essayez de mettre le fichier commons-logging-xyzjar dans votre répertoire lib Tomcat. Cela a résolu le problème! BTW, j'utilise Tomcat 6.


nom chose? Qu'est-ce que tu racontes?
Bob V.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.