es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No puedo ejecutar mi archivo .jar después de actualizar SpringBoot de 2.4.X a 2.6.X.

Actualicé recientemente mi biblioteca de Gradle de la versión 5.X a la 7.3.1 y actualicé Spring Boot de la versión 2.4.X a la 2.6.X, pero me estoy enfrentando a algunos problemas. Antes, utilizaba la construcción de Gradle para crear un archivo JAR y ejecutarlo en mi servidor, lo cual funcionaba correctamente con Spring Boot 2.4.X, pero ahora con la versión 2.6.X tengo algunos problemas:

no hay ningún atributo de manifiesto principal

Así que agregué lo siguiente a mi archivo build.gradle:

jar {
   manifest {
       attributes "Main-Class": "mi.paquete.ClasePrincipal"
   }

   from {
       configurations.compileClasspath.collect { it.isDirectory() ? it : zipTree(it) }
       configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
   }
}

Ahora estoy obteniendo el siguiente error:

No se pudo encontrar ni cargar la clase principal mi.paquete.ClasePrincipal

Si vuelvo a cambiar a la versión 2.4.X, funciona correctamente. El tamaño del archivo JAR es el siguiente:
– Spring Boot 2.4.X -> 90 MB
– Spring Boot 2.6.X -> 500 KB

Así que intenté crear un archivo JAR con todas las dependencias utilizando shadowJar y obtuve el siguiente error:

ERROR org.springframework.boot.SpringApplication – Falló la ejecución de la aplicación
Dec 21 10:04:09 vps-11602ed1 project[12706]: org.springframework.context.ApplicationContextException: No se puede iniciar el servidor web; la excepción anidada es org.springframework.context.ApplicationContextException: No se puede iniciar ServletWebServerApplicationContext debido a la falta del bean ServletWebServerFactory.

Si alguien tiene una respuesta sobre cómo hacer que funcione con Spring Boot 2.6.X, agradezco de antemano su ayuda.

Gracias anticipadas.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema que estás enfrentando está relacionado con el atributo Main-Class en el archivo manifest de tu archivo ejecutable jar. El mensaje de error “no main manifest attribute” sugiere que el archivo jar no puede encontrar el punto de entrada para tu aplicación.

    Cuando actualizaste a Spring-Boot 2.6.X, agregaste el atributo Main-Class a tu archivo build.gradle para especificar el punto de entrada de tu aplicación. Sin embargo, aún estás obteniendo el error “Could not find or load main class my.package.MainClass”.

    Una posible razón para este error es que podrías tener un nombre de paquete diferente en tu código. Verifica dos veces el nombre de tu paquete y asegúrate de que coincida con el nombre de paquete que especificaste en el atributo Main-Class.

    Respecto al error que obtuviste al crear un fat jar con shadowJar, parece que hay un problema con la configuración del servidor web. El mensaje de error sugiere que falta el bean ServletWebServerFactory. Esto podría deberse a que la configuración del servidor web ha cambiado en Spring-Boot 2.6.X.

    Puedes intentar agregar la siguiente dependencia a tu archivo build.gradle:

    implementation 'org.springframework.boot:spring-boot-starter-web'
    

    Esto agregará las dependencias necesarias para una aplicación web, incluyendo ServletWebServerFactory.

    Si eso no funciona, intenta buscar otros cambios en la configuración del servidor web de Spring-Boot 2.6.X y actualiza tu código en consecuencia.

    ¡Espero que esto ayude!

Comments are closed.