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
skaffman
la source
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:

118

J'ai également rencontré les mêmes problèmes, pour corriger, téléchargez les fichiers jar à partir de l'url ci-dessous

http://commons.apache.org/logging/download_logging.cgi

et copiez dans votre dossier lib, résoudra votre problème.

Manikandan
la source
2
cela ne fonctionne pas pour moi, même après avoir ajouté le pot commun mentionné ci-dessus dans classpath
Deen John
2
Ni pour moi. Ces bibliothèques sont cassées. C'est tellement frustrant.
Wesos de Queso
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>
Asuka
la source
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>
Paramesh Korrakuti
la source
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.

empilable
la source
8

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

Un copain
la source
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.

Jesper
la source
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>
Patrick Brielmayer
la source
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.

émills
la source
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
Tush
la source
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.

devaaron
la source
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.

歌 永 _
la source
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-

dhammikas
la source
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.

Brianegge
la source
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 ".

Le troisième
la source
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 .

Voy
la source
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.

Anmol Gupta
la source
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

Yuliem Alavez
la source
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.

Paul
la source
-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.

Sibichakravarthy Gunasekaran
la source
-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

Krishnarjun
la source
-2

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

Sachin
la source
-2

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

user1244663
la source
-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.

Bob V.
la source
nom chose? Qu'est-ce que tu racontes?
Bob V.