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

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:



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>


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>

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 .


8

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


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.


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>

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.


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

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.


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.



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-


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.


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


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 .


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.


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


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.


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


-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


-2

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


-2

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


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


Namenssache? Worüber redest du?
Bob V.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.