Resuelva el error Java.Lang.NoClassDefFoundError: Org/Apache/Commons/Logging/LogFactory

Sheeraz Gul 20 junio 2023
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.

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.

Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

Artículo relacionado - Java Error