HOWTO · Java
Java.Lang.NoClassDefFoundError: Org/Apache/Commons/Logging/LogFactory エラーを解決します。
このチュートリアルでは、Java の java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory エラーを示します。
このページの内容
このチュートリアルでは、Java の java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory エラーについて説明します。
java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory を解決する
Apache Commons と Spring を使用している場合、依存関係の注入中にエラー java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory が発生することがあります。 通常、エラーは次のようになります。
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)
このエラーの理由は次のとおりです。
- Apache Commons Logging jar ファイルが正しくないか、存在しません。
- Commons Logging は依存関係に追加されません。
この問題を解決するための上記の理由の解決策は次のとおりです。
正しい Apache Commons Logging Jar を追加する
Apache Commons Logging jar がプロジェクトのビルド パスに追加されていないか、追加されたファイルが正しくない場合、java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactoryエラーがスローされます。
この問題を解決するには、次の手順に従います。
-
こちら から Apache Commons Logging jar をダウンロードします。
-
jar をプロジェクトのビルド パスに追加します。
上記の 2つの手順により、エラー java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory が解決されるはずです。 Maven または Spring を使用している場合は、依存関係を追加する必要があります。
Commons Logging を依存関係に追加する
Maven を使用していて、Apache Commons-Logging が依存関係にない場合、java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory エラーがスローされます。 次の依存関係を pom.xml に追加します。
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
上記の依存関係を追加すると、Maven の問題が解決されます。
Spring アプリケーションを使用する場合、開発者は Commons Logging を除外することがありますが、アプリケーションにはロギング フレームワークが必要なため、別のロギング フレームを挿入するのを忘れます。
<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>
上記の pom.xml は Spring アプリケーション用であり、ご覧のとおり、Commons-Logging は除外されています。 それが java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory エラーをスローする理由です。
この問題を解決するには、別のロギング フレームワークを追加する必要があります。 ほとんどの場合、開発者は SLF4j ロギングを使用します。 また、ブリッジを使用して Spring のロギングをリダイレクトする必要があります。
Spring アプリケーションの pom.xml に以下を追加します。
<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>
上記の Maven および Spring のプロセスに従うと、java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory エラーが修正されます。