HOWTO · Java
Resuelva el error Java.Lang.NoClassDefFoundError: Org/Apache/Commons/Logging/LogFactory
Este tutorial demuestra el error java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory en Java.
En esta página
Este tutorial demuestra el error java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory en Java.
Resuelva el java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
Al usar Apache Commons y Spring, el error java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory puede ocurrir al inyectar las dependencias. El error generalmente se ve así:
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)
Las razones de este error son:
- Los archivos jar de Apache Commons Logging no son correctos o no están presentes.
- Commons Logging no se agrega a las dependencias.
Aquí están las soluciones por las razones anteriores para resolver este problema:
Agregar los archivos de registro de Apache Commons correctos
Si los archivos jar de Apache Commons Logging no se agregan a la ruta de compilación de su proyecto o los archivos agregados no son correctos, arrojará el error java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory.
Siga los pasos a continuación para resolver este problema:
-
Descargue los archivos jar de Apache Commons Logging desde aquí.
-
Agregue los frascos a la ruta de compilación de su proyecto.
Los dos pasos anteriores deberían resolver el error java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory. Si está utilizando Maven o Spring, debe agregar dependencias.
Agregar registro de Commons a las dependencias
Si está utilizando Maven y Apache Commons-Logging no se encuentra en las dependencias, arrojará el error java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory. Agregue la siguiente dependencia a pom.xml:
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
Agregar la dependencia anterior resolverá el problema de Maven.
En el caso de usar la aplicación Spring, los desarrolladores a veces excluyen el registro de Commons pero se olvidan de insertar otro marco de registro ya que la aplicación requiere el marco de registro:
<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>
El pom.xml anterior es para la aplicación Spring y, como podemos ver, Commons-Logging está excluido; por eso arroja el error java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory.
Para resolver este problema, debemos agregar otro marco de registro; la mayoría de las veces, los desarrolladores usan el registro SLF4j. También necesitamos redirigir el registro de Spring usando un puente.
Agregue lo siguiente a pom.xml de la aplicación Spring:
<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>
Seguir el proceso anterior para Maven y Spring solucionará el error java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory.