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)

このエラーの理由は次のとおりです。

  1. Apache Commons Logging jar ファイルが正しくないか、存在しません。
  2. 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 エラーが修正されます。