Abrufen der Ausnahme java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory

188

Ich führe ein einfaches Abhängigkeitsinjektionsprogramm des Frühlings aus und bekomme diese Ausnahme. Ich habe bereits die Dateien common-logging1.1.1.jar und spring.jar eingefügt. Könnten Sie bitte helfen?

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
quelle
2
Überprüfen Sie zunächst, ob Ihr Klassenpfad tatsächlich korrekt ist. Versuchen Sie zweitens, das JAR zu öffnen und überprüfen Sie, ob es tatsächlich die Klasse org.apache.commons.logging.LogFactory enthält. Versuchen Sie abschließend das Debuggen, indem Sie im Klassenladeprogramm einen Haltepunkt festlegen.
Kolibri
2
Alle Antworten unten commons-loggingsind ein Rückschritt. Verwenden Sie jcl-over-slf4jstattdessen.
Opyate
Fügen Sie in Android testCompile 'commons-logging: commons-logging: 1.1.1' zu app.gradle hinzu
Roger Garzon Nieto

Antworten:

118

Ich habe auch die gleichen Probleme gehabt, um zu beheben, laden Sie die JAR-Dateien von der folgenden URL herunter

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

und kopieren Sie in Ihren lib-Ordner, um Ihr Problem zu beheben.

Manikandan
quelle
2
Dies funktioniert nicht für mich, selbst nachdem ich das oben erwähnte Commons-Glas im Klassenpfad hinzugefügt habe
Deen John
2
Weder für mich. Diese Bibliotheken sind kaputt. Es ist so frustierend.
Wesos de Queso
112

Wenn Sie maven zum Verwalten von Abhängigkeiten verwenden, fügen Sie die folgende Zeile in Ihre pom.xml ein:

<dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.1.1</version>
</dependency>
Asuka
quelle
19

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

Wenn Sie maven verwenden, verwenden Sie den folgenden Code.

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
    <version>${slf4j.version}</version>
</dependency>
Paramesh Korrakuti
quelle
2
Das Einschließen von "jcl-over-slf4j" war die einzige Lösung, die für mich funktioniert. Ich hatte bereits die Commons-Protokollierung in meinen Abhängigkeiten.
Italo Borssatto
Ich verwende Spring-Boot Version 2.0.1.RELEASE mit Maven. Dies war die einzige Lösung, die auch für mich funktioniert hat.
Carlos Nantes
18

Ich hatte das gleiche Problem und löste es, indem ich das einfach commons-logging.jarzum Klassenpfad hinzufügte .

stapelbar
quelle
8

Das Hinzufügen von commons-logging.jar oder commons-logging-1.1.jar löst dieses Problem ...

Ein Kumpel
quelle
6

Ich habe bereits common-logging1.1.1.jar und ...

Sind Sie sicher, dass Sie den Namen der JAR-Datei genau richtig geschrieben haben? Ich denke, es sollte wahrscheinlich sein commons-logging-1.1.1.jar(beachten Sie das Extra -im Namen). Überprüfen Sie auch, ob der Verzeichnisname korrekt ist.

NoClassDefFoundError bedeutet immer, dass eine Klasse nicht gefunden werden kann, sodass Ihr Klassenpfad höchstwahrscheinlich nicht korrekt ist.

Jesper
quelle
2
NoClassDefFoundErrorkann auch durch andere Eckfälle verursacht werden, z. B. wenn Klasseninitialisierer unter dunklen Umständen fehlschlagen.
Skaffman
Wenn er einen NoClassDefFoundError erhält, weil die Klasseninstanziierung fehlgeschlagen ist, sollte er zuerst eine ExceptionInInitializerError-Ausnahme erhalten haben (es sei denn, sie wurde natürlich still abgefangen).
Kolibri
Und vergessen Sie nicht das "s"commons-logging-1.1.1.jar
Glenn Lawrence
@GlennLawrence Danke, den Namen korrigiert.
Jesper
6

Das Festlegen des Kompilierungsbereichs hat es für mich getan

<dependency>
  <groupId>commons-logging</groupId>
  <artifactId>commons-logging</artifactId>
  <version>1.2</version>
  <scope>compile</scope>
</dependency>
Patrick Brielmayer
quelle
1
Hat meine Situation gelöst. Beim Ausführen von Mockito-Testfällen wurde dieser Fehler angezeigt und diese Abhängigkeit in pom.xml behoben.
Venugopal
4

Versuchen Sie, das Ziel- / Bereitstellungsverzeichnis für die App vollständig zu bereinigen, um veraltete Bibliotheksgläser zu entfernen. Erstellen Sie einen neuen Build und überprüfen Sie, ob commons-logging.jar tatsächlich im richtigen lib-Ordner abgelegt wird. Es ist möglicherweise nicht enthalten, wenn Sie die Bibliothek für die Anwendung erstellen.

Emills
quelle
4

Problem behoben durch Hinzufügen von commons-logging.jar

Imp-Dateien sind,

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
quelle
3

Zwei Optionen (mindestens):

  1. Fügen Sie Ihrer Datei das Commons-Logging-Glas hinzu, indem Sie es in einen lokalen Ordner kopieren.

Hinweis: Das Verknüpfen der JAR-Datei kann zu Problemen mit dem Server führen und möglicherweise zum Grund, warum sie dem Erstellungspfad hinzugefügt wird, das Server-Startproblem jedoch nicht löst.

Richten Sie das Glas also nicht auf einen externen Ordner.

ODER...

  1. Wenn Sie es wirklich nicht lokal hinzufügen möchten, weil Sie das Glas zwischen Projekten teilen, dann ...

Wenn Sie eine TC-Serverinstanz verwenden, müssen Sie die JAR-Datei als externe JAR-Datei zu den Ausführungskonfigurationen der Serverinstanz hinzufügen.

Gehen Sie zu Ausführen als, Konfigurationen ausführen ..., {Ihre TC-Serverinstanz} und dann zur Registerkarte Klassenpfad.

Fügen Sie dann das Commons-Logging-Glas hinzu.

Devaaron
quelle
3

Ich habe die gleichen Probleme wie du. Schließlich überprüfte ich die Version von Apache, die die Klasse besitzt. Ich fand, dass die Version 1.0.4 die Klasse hat.

Versuchen Sie, die Version 1.0.4 anstelle von 1.1.X oder 1.2.X zu verwenden

Meine Abhängigkeiten:

    <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>

Mein Java Code

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());

Mein Ergebnis:

130489168

Stellen Sie außerdem sicher, dass Ihre Maven-Abhängigkeiten gut importiert sind.

歌 永 _
quelle
0

Überprüfen Sie einfach, ob die Datei commons-logging.jar zu Ihren Bibliotheken und dem Klassenpfad hinzugefügt wurde. Ich hatte das gleiche Problem und das lag daran. dhammikas-

Dhammikas
quelle
0

Im Allgemeinen weise ich den Klassenpfad einer Variablen zu und überprüfe ihn dann. Ich habe ein kleines Ruby-Skript geschrieben, das ich in meine Startskripte einbinde und das den Klassenpfad überprüft, bevor Java gestartet wird . Durch die Überprüfung des Klassenpfads vor dem Start der JVM habe ich viel Zeit bei der Fehlerbehebung bei solchen Problemen gespart.

Brianegge
quelle
2
Sie sollten stattdessen Tools wie Maven verwenden.
Neovibrant
0

Hey, ich habe das Tutorial auf tutorialpoint.com verfolgt. Fügen Sie nach Abschluss von Schritt 2 - Installieren der allgemeinen Apache-Protokollierungs-API Folgendes hinzu: Sie müssen externe JAR- Bibliotheken aus den in diesem Schritt heruntergeladenen Dateien in das Projekt importieren . Für mich war der Dateiname " commons-logging-1.1.1 ".

Der dritte
quelle
0

Wenn Sie dies unter Android ausführen, beachten Sie, dass das java.beansPaket unter Android anscheinend nicht vollständig ist. Versuchen Sie Folgendes, um zu versuchen, das Problem unter Android zu beheben:

  1. Laden Sie android-java-air-bridge.jar herunter (derzeit befindet sich der Download-Button unten auf der Seite oder ein direkter Link hier )
  2. Kopieren Sie das heruntergeladene Glas in Ihre [APPROOT] / app / libs (oder verknüpfen Sie das JAR auf eine andere Weise).
  3. Ändern Sie die import ***Aussagen in die der Luftbrücke. ZB import javadz.beanutils.BeanUtilsstattimport org.apache.commons.beanutils.BeanUtils;
  4. Bereinigen Sie das Projekt und erstellen Sie es neu

Quelle 1 , Quelle 2

Ich entschuldige mich, da mir klar wird, dass dies die Frage nicht genau beantwortet, obwohl diese SO-Seite bei der Suche nach von Android generierten NoClassDefFoundError: Failed resolution of: beanUtilsFehlern häufig auftaucht .

Voy
quelle
0

Ich habe den gleichen Fehler erhalten, während das Glas vorhanden war. Keine Lösung hat funktioniert. Was funktionierte, war das Löschen des JAR aus dem Dateisystem (aus dem .m2-Verzeichnis) und das anschließende Bereinigen des Maven-Projekts.

Anmol Gupta
quelle
0

Ich habe das gleiche Problem in der Eclipse-IDE. Meine Lösung war: Klicken Sie mit der rechten Maustaste auf Mein Projekt> Eigenschaften

Geben Sie hier die Bildbeschreibung ein

Klicken Sie in Maven und schreiben Sie: jar in das Active Maven-Projekt

Geben Sie hier die Bildbeschreibung ein

Zum Schluss Übernehmen und schließen

Yuliem Alavez
quelle
0

In meinem Fall habe ich eine Tomcat-App in Eclipse getestet und diesen Fehler erhalten. Ich habe es durch Überprüfen der .classpathDatei gelöst und diesen Eintrag korrigiert:

<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>

Das Attribut org.eclipse.jst.component.dependencyfehlte.

paul
quelle
-1

Überprüfen Sie, ob die Gläser ordnungsgemäß importiert wurden. Ich habe sie über den Erstellungspfad importiert. Das JAR im Ordner WAR / lib wurde jedoch nicht erkannt. Später habe ich das gleiche Glas in den Ordner war / lib kopiert . Es funktioniert jetzt gut. Sie können Ihr Projekt aktualisieren / bereinigen.

Sibichakravarthy Gunasekaran
quelle
-2

Hallo Freunde, wenn Sie eine Ausnahme erhalten, die keine Klasse im Ruhezustand gefunden hat, handelt es sich um das Problem von JAR-Dateien. Es gibt hauptsächlich zwei Probleme. 1.
Ich meine, Ihre funktionierende alte Version von Ruhezustand kann 3.2 sein funktioniert gut

2. überprüft zuerst die Datenbankverbindung. Wenn die Datenbank ordnungsgemäß funktioniert, ist ein Fehler in Ihrem Programm oder Ihrer JAR-Datei aufgetreten.

Bitte überprüfen Sie diese beiden Probleme, wenn es auch nicht funktioniert. Sie haben versucht, eine IDE zu erstellen. Ich verwende die Version netbeanside 6.9. Hier funktioniert der Ruhezustand einwandfrei. Sie erhalten keinen Fehler von der Klasse, die keine Ausnahme gefunden hat.

Ich hoffe dieser hilft mehr

Krishnarjun
quelle
-2

Die Lösung besteht darin, die JAR-Datei common-logging.xx hinzuzufügen

Sachin
quelle
-2

Versuchen Sie, diese Abhängigkeit hinzuzufügen org.apache.commons commons-exec 1.3

user1244663
quelle
-3

Wenn alles andere fehlschlägt, wie es für mich der Fall war, versuchen Sie, das commons-logging-xyzjar in Ihrem Tomcat lib-Verzeichnis abzulegen. Es hat das Problem gelöst! Übrigens benutze ich Tomcat 6.

Bob V.
quelle
Namenssache? Worüber redest du?
Bob V.