HOWTO · Java
Beheben Sie den Java.Lang.NoClassDefFoundError: Org/Apache/Commons/Logging/LogFactory-Fehler
Dieses Tutorial demonstriert den Fehler java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory in Java.
Auf dieser Seite
Dieses Tutorial demonstriert den Fehler java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory in Java.
Beheben Sie den java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
Bei Verwendung von Apache Commons und Spring kann beim Einfügen der Abhängigkeiten der Fehler java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory auftreten. Der Fehler sieht normalerweise so aus:
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)
Die Gründe für diesen Fehler sind:
- Die JAR-Dateien von Apache Commons Logging sind nicht korrekt oder nicht vorhanden.
- Commons Logging wird nicht zu den Abhängigkeiten hinzugefügt.
Hier sind die Lösungen aus den oben genannten Gründen, um dieses Problem zu lösen:
Fügen Sie die richtigen Apache Commons Logging Jars hinzu
Wenn die Apache Commons Logging-Jars nicht zum Build-Pfad Ihres Projekts hinzugefügt werden oder die hinzugefügten Dateien nicht korrekt sind, wird der Fehler java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory ausgegeben.
Führen Sie die folgenden Schritte aus, um dieses Problem zu lösen:
-
Laden Sie die Apache Commons Logging-Jars von hier herunter.
-
Fügen Sie die JAR-Dateien dem Erstellungspfad Ihres Projekts hinzu.
Die beiden obigen Schritte sollten den Fehler java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory beheben. Wenn Sie Maven oder Spring verwenden, müssen Sie Abhängigkeiten hinzufügen.
Hinzufügen von Commons-Protokollierung zu Abhängigkeiten
Wenn Sie Maven verwenden und Apache Commons-Logging in den Abhängigkeiten fehlt, wird der Fehler java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory ausgegeben. Fügen Sie die folgende Abhängigkeit zu pom.xml hinzu:
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
Das Hinzufügen der obigen Abhängigkeit löst das Problem für Maven.
Bei Verwendung der Spring-Anwendung schließen die Entwickler manchmal das Commons Logging aus, vergessen aber, einen weiteren Protokollierungsframe einzufügen, da die Anwendung das Protokollierungsframework erfordert:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
Die obige pom.xml ist für die Spring-Anwendung, und wie wir sehen können, ist das Commons-Logging ausgeschlossen; Aus diesem Grund wird der Fehler java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory ausgegeben.
Um dieses Problem zu lösen, müssen wir ein weiteres Protokollierungsframework hinzufügen. Meistens verwenden die Entwickler das SLF4j-Logging. Wir müssen auch die Protokollierung der Quelle über eine Brücke umleiten.
Fügen Sie Folgendes zu pom.xml der Spring-Anwendung hinzu:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Redirect the Spring logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${jcl.slf4j.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
Das Befolgen des obigen Prozesses für Maven und Spring behebt den Fehler java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory.