当前位置:  开发笔记 > 编程语言 > 正文

SpringBoot - 制作jar文件 - 在META-INF/spring.factories中找不到自动配置类

如何解决《SpringBoot-制作jar文件-在META-INF/spring.factories中找不到自动配置类》经验,为你挑选了4个好方法。

使用Intellij启动我的应用程序时一切正常.但是当我做了fatJar并执行时:

java -jar myapp.jar

我懂了:

16:37:44.194 [main] ERROR org.springframework.boot.SpringApplication - Application startup failed
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [pl.mypackage.Main]; 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.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
        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 pl.mypackage.Main.main(Main.java:39)
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)
        ... 14 common frames omitted
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [pl.mypackage.Main]; 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.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
        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 pl.mypackage.Main.main(Main.java:39)
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)
        ... 14 more

看起来它没有在META-INF/spring.factories中找到自动配置类.如何添加此文件?这个文件的内容应该是什么?



1> 小智..:

我有同样的问题,只是解决了它.

起初我用它生成了胖罐maven-assembly-plugin,它创建了一个名为的文件mavenproject1-0.0.1-SNAPSHOT-jar-with-dependencies.jar.当我尝试运行它时,此文件提供了与您相同的问题.

我认为因为它是一个Spring Boot应用程序,所以你需要使用它们的插件.我将包装改为了spring-boot-maven-plugin,它创建了两个文件:mavenproject1-0.0.1-SNAPSHOT.jarmavenproject1-0.0.1-SNAPSHOT.jar.original.只是尝试java -jar target/mavenproject1-0.0.1-SNAPSHOT.jar,它将有希望工作.:-)

作为参考,这是我的pom.xml:



    4.0.0
    com.company
    mavenproject1
    0.0.1-SNAPSHOT
    jar
    
        org.springframework.boot
        spring-boot-starter-parent
        1.4.0.RELEASE
        
        
    
    
        UTF-8
        1.8
        1.8
    
    
      
            org.springframework.boot
            spring-boot-starter
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-configuration-processor
            true
        
        
            com.company.common
            common-files
            0.0.1-SNAPSHOT
        
     
    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                
                    true
                    ${start-class}
                
                  
                    
                      
                        repackage
                      
                    
                
            
            
              maven-assembly-plugin
              2.2-beta-5
              
                
                  
                    true
                    com.company.mavenproject1.MainClass
                  
                
                
                  jar-with-dependencies
                
              
              
                
                  assemble-all
                  package
                  
                    single
                  
                
              
            
        
    


值得注意的是,pom.xml中的<packaging> jar </ packaging>是必要的。没有它,您仍然可以在IDE中运行该应用程序,但是.jar将不起作用。
进行这些更改后,您使用的构建命令是什么?mvn干净安装?mvn包?或者是其他东西?
如果我不能使用“ spring-boot-starter-parent”作为父母怎么办?

2> 小智..:

这个配置适合我.我执行我的JAR作为服务但行是:

javaw -jar MY_JAR.jar

POM:


        
        com.PATH_TO_MAIN.Main

...

    org.springframework.boot
    spring-boot-maven-plugin

使用Spring-boot不再需要使用assembly-plugin.别忘了打电话给目标

您可以看到文档示例:http://docs.spring.io/spring-boot/docs/current/reference/html/build-tool-plugins-maven-plugin.html


如果spring应用程序只是另一个独立jar中的另一个依赖项,那么这似乎不起作用.

3> cscan..:

或者,如果由于某种原因无法使用spring boot插件,则可以在应用程序中包含以下文件.它应该被称为src/main/resources/META-INF/spring.factories:

https://github.com/spring-projects/spring-boot/blob/1.5.x/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories

这适用于spring boot 1.x,如果你想在REPL中使用spring managed beans,这将非常有用.


该文件的新位置在https://github.com/spring-projects/spring-boot/blob/2.1.x/spring-boot-project/spring-boot-autoconfigure/src/main/resources/META-INF /spring.factories

4> 小智..:

我在pom中添加了此配置,问题已解决:



    
        org.springframework.boot
        spring-boot-maven-plugin
        1.5.2.RELEASE
        
            
                
                    repackage
                
            
        
    


推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有