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