Docker: la imagen no se ejecutará: No se encontraron clases de configuración automática en META-INF/spring.factories
Estoy trabajando en mi primera imagen Docker muy básica con Spring Boot y Gradle. Cuando la ejecuto, obtengo el siguiente error:
No se encontraron clases de configuración automática en META-INF/spring.factories. Si está utilizando un paquete personalizado, asegúrese de que el archivo sea correcto.
02:33:59.843 [main] ERROR org.springframework.boot.SpringApplication - Application run failed
java.lang.IllegalArgumentException: No se encontraron clases de configuración automática en META-INF/spring.factories. Si está utilizando un paquete personalizado, asegúrese de que el archivo sea correcto.
en org.springframework.util.Assert.notEmpty (Assert.java:470)
en org.springframework.boot.autoconfigure.AutoConfigurationImportSelector.getCandidateConfigurations (AutoConfigurationImportSelector.java: 180)
en org.springframework.boot.autoconfigure.AutoConfigurationImportSelector.getAutoConfigurationEntry (AutoConfigurationImportSelector.java:123)
en org.springframework.boot.autoconfigure.AutoConfigurationImportSelector$AutoConfigurationGroup.process (AutoConfigurationImportSelector.java:434)
en org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGrouping.getImports (ConfigurationClassParser.java: 879)
en org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGroupingHandler.processGroupImports (ConfigurationClassParser.java:809)
en org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorHandler.process (ConfigurationClassParser.java:780)
en org.springframework.context.annotation.ConfigurationClassParser.parse (ConfigurationClassParser.java:193)
en org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions (ConfigurationClassPostProcessor.java:331)
en org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry (ConfigurationClassPostProcessor.java:247)
en org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors (PostProcessorRegistrationDelegate.java:311)
en org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors (PostProcessorRegistrationDelegate.java:112)
en org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:746)
en org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:564)
en org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145)
en org.springframework.boot.SpringApplication.refresh(SpringApplication.java:730)
en org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:412)
en org.springframework.boot.SpringApplication.run(SpringApplication.java:302)
en org.springframework.boot.SpringApplication.run(SpringApplication.java:1301)
en org.springframework.boot.SpringApplication.run(SpringApplication.java:1290)
en be.dennisvn.demo.MoesCrudApplication.main(MoesCrudApplication.java:13)
02:33:59.875 [main] DEBUG org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext - Cerrando org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@d6da883, iniciado el Thu Dec 02 02:33:59 UTC 2021
Este es mi clase principal:
package be.dennisvn.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MoesCrudApplication {
public static void main(String[] args) {
SpringApplication.run(MoesCrudApplication.class, args);
}
}
Este es mi archivo «build.gradle»:
plugins {
id ‘org.springframework.boot’ version ‘2.6.0’
id ‘io.spring.dependency-management’ version ‘1.0.11.RELEASE’
id ‘java’
id ‘com.palantir.docker’ version ‘0.22.1’
}
group = ‘be.dennisvn’
version = ‘0.0.1-SNAPSHOT’
sourceCompatibility = ’11’
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
docker {
name “crudformoes”
dockerfile file(‘Dockerfile’)
copySpec.from(jar).rename(“.*”,”app.jar”)
buildArgs([‘JAR_FILE’: ‘app.jar’])
}
dependencies {
implementation ‘org.springframework.boot:spring-boot-starter-data-jpa’
implementation ‘org.springframework.boot:spring-boot-starter-web’
implementation ‘org.springframework.boot:spring-boot-starter-websocket’
compileOnly ‘org.projectlombok:lombok’
runtimeOnly ‘org.postgresql:postgresql’
annotationProcessor ‘org.projectlombok:lombok’
testImplementation ‘org.springframework.boot:spring-boot-starter-test’
}
test {
useJUnitPlatform()
}
Este es mi archivo «Dockerfile»:
FROM openjdk:17.0.1
ADD MoesCrud.jar MoesCrud.jar
EXPOSE 9090
ENTRYPOINT [“java”, “-jar”, “MoesCrud.jar”]
“`
Además de probar la mayoría de las sugerencias en otros hilos, también intenté quitar id 39; com.palantir.docker 39; versión 39; 0.22.1 39;
porque pensé que el plugin lo estaba causando. Pero tampoco resuelve el error. Sé que ver tutoriales de YouTube no siempre es la forma más inteligente, pero me resulta abrumador encontrar una explicación directa de cómo funciona todo junto. Revisé publicaciones similares, pero todas tienen compilaciones muy específicas, trabajan con archivos pom.xml o se publican hace años.
davy.ai
Este mensaje de error sugiere que no existen clases de autoconfiguración en el archivo
META-INF/spring.factories
. Las clases de autoconfiguración son utilizadas por Spring Boot para configurar automáticamente su aplicación basándose en las dependencias que usted ha añadido a su proyecto.El problema podría estar originado por algún problema con su proceso de construcción o empaquetado. Aquí tiene algunas cosas que podría intentar:
META-INF/spring.factories
existe en el archivo jar producido por su construcción.ADD
del Dockerfile.Si ninguna de estas sugerencias resuelve el problema, podría intentar buscar mensajes de errores más detallados o consultar la documentación de Spring Boot para obtener consejos de solución de problemas.