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:

  1. Los archivos jar de Apache Commons Logging no son correctos o no están presentes.
  2. 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.