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 로깅 Jar 추가

Apache Commons Logging jar가 프로젝트의 빌드 경로에 추가되지 않았거나 추가된 파일이 올바르지 않으면 java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory 오류가 발생합니다.

이 문제를 해결하려면 아래 단계를 따르십시오.

  • 여기에서 Apache Commons Logging jar를 다운로드합니다.
  • 프로젝트의 빌드 경로에 jar를 추가합니다.

위의 두 단계는 java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory 오류를 해결해야 합니다. Maven 또는 Spring을 사용하는 경우 종속성을 추가해야 합니다.

종속성에 Commons 로깅 추가

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 오류가 수정됩니다.