无法处理配置类的导入候选项
我有一个Spring Boot项目,我可以在IntelliJ中成功运行,但是当我打包一个可执行jar时,我再也无法运行它了。 这是exception的堆栈跟踪:
18:13:55.254 [main] INFO oscaAnnotationConfigApplicationContext - Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@b3d7190: startup date [Wed Sep 07 18:13:55 CEST 2016]; root of context hierarchy 18:13:55.403 [main] WARN oscaAnnotationConfigApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [el.dorado.App]; nested exception is java.lang.IllegalArgumentException: No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct. 18:13:55.414 [main] ERROR osboot.SpringApplication - Application startup failed org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [el.dorado.App]; nested exception is java.lang.IllegalArgumentException: No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct. at org.springframework.context.annotation.ConfigurationClassParser.processDeferredImportSelectors(ConfigurationClassParser.java:489) at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:191) at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:321) at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:243) at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:273) at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:98) at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:681) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:523) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:369) at org.springframework.boot.SpringApplication.run(SpringApplication.java:313) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1185) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1174) at dz.lab.jpmtask.App.main(App.java:33) Caused by: java.lang.IllegalArgumentException: No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct. at org.springframework.util.Assert.notEmpty(Assert.java:276) at org.springframework.boot.autoconfigure.EnableAutoConfigurationImportSelector.getCandidateConfigurations(EnableAutoConfigurationImportSelector.java:145) at org.springframework.boot.autoconfigure.EnableAutoConfigurationImportSelector.selectImports(EnableAutoConfigurationImportSelector.java:84) at org.springframework.context.annotation.ConfigurationClassParser.processDeferredImportSelectors(ConfigurationClassParser.java:481) ... 13 common frames omitted
我的配置是这样的:
@Configuration @EnableAutoConfiguration public class AppConfig { ... some beans }
我在项目资源文件夹下添加了META-INF/spring.factories
,如43.2中所述找到自动配置候选项 ,如下所示但是这并没有解决问题:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ el.dorado.AppConfig
这是项目pom.xml
:
4.0.0 el.dorado ElDorado jar 1.0-SNAPSHOT ElDorado http://maven.apache.org 4.12 org.springframework.boot spring-boot-starter-parent 1.4.0.RELEASE org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-data-jpa com.h2database h2 junit junit ${junit.version} test maven-assembly-plugin el.dorado.App true jar-with-dependencies make-assembly package single org.jacoco jacoco-maven-plugin <!--0.7.8-SNAPSHOT--> jacoco-initialize prepare-agent jacoco-site verify report
我只是想通了,我应该一直使用Spring Boot maven插件 。 现在我的pom.xml
的构建部分如下所示:
org.springframework.boot spring-boot-maven-plugin true dz.lab.jpmtask.App repackage org.jacoco jacoco-maven-plugin jacoco-initialize prepare-agent jacoco-site verify report
我使用mvn clean package
和java -jar target/myproject.jar
构建项目,它就像一个魅力。
我解决了如下:
- 删除spring-boot-maven-plugin
- 在spring插件中配置弹簧变换器请参考spring parent pom
我也得到了
无法处理配置类的导入候选[…]; 嵌套exception是java.lang.IllegalStateException:无法读取类的元数据…
由于我的spring.factories
文件中的拼写错误导致的错误。 在这种情况下,根exception是
类路径资源[…]无法打开,因为它不存在。
这是一个重要的检查点,因为它无法在编译时validation。
我从mvn clean compile assembly:single
切换mvn clean compile assembly:single
到mvn clean package
,错误消失了。
我认为你忘了在你的AppConfig中使用Annotation。
添加三个注释为
@Configuration @EnableWebMvc @ComponentScan("Scan_Package_Name") public class AppConfig { ... some beans }