无法处理配置类的导入候选项

我有一个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 packagejava -jar target/myproject.jar构建项目,它就像一个魅力。

我解决了如下:

  1. 删除spring-boot-maven-plugin
  2. 在spring插件中配置弹簧变换器请参考spring parent pom

我也得到了

无法处理配置类的导入候选[…]; 嵌套exception是java.lang.IllegalStateException:无法读取类的元数据…

由于我的spring.factories文件中的拼写错误导致的错误。 在这种情况下,根exception是

类路径资源[…]无法打开,因为它不存在。

这是一个重要的检查点,因为它无法在编译时validation。

我从mvn clean compile assembly:single切换mvn clean compile assembly:singlemvn clean package ,错误消失了。

我认为你忘了在你的AppConfig中使用Annotation。

添加三个注释为

 @Configuration @EnableWebMvc @ComponentScan("Scan_Package_Name") public class AppConfig { ... some beans }