Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SpringBoot - making jar files - No auto configuration classes found in META-INF/spring.factories

Everything was working fine when starting my app using IntelliJ. But when I made a fat jar and executed it with

java -jar myapp.jar 

I got this:

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 

It looks like it doesn't found auto configuration classes in META-INF/spring.factories. How to add it, and what should be the content of this file?

like image 612
Defozo Avatar asked Aug 05 '16 14:08

Defozo


People also ask

How do I exclude a configuration class in spring boot?

If the class is not on the classpath, you can use the excludeName attribute of the annotation and specify the fully qualified name instead. Finally, you can also control the list of auto-configuration classes to exclude by using the spring. autoconfigure. exclude property.

Does spring boot support auto-configuration?

Simply put, the Spring Boot auto-configuration helps us automatically configure a Spring application based on the dependencies that are present on the classpath. This can make development faster and easier by eliminating the need to define certain beans included in the auto-configuration classes.

How do I turn on autoconfiguration in spring boot?

You need to opt-in to auto-configuration by adding the @EnableAutoConfiguration or @SpringBootApplication annotations to one of your @Configuration classes. You should only ever add one @SpringBootApplication or @EnableAutoConfiguration annotation.

Can you disable particular autoconfiguration in spring boot?

Disable Auto-configuration Classes. We can also disable the specific auto-configuration classes, if we do not want to be applied. We use the exclude attribute of the annotation @EnableAutoConfiguration to disable the auto-configuration classes.


1 Answers

I had the same problem and just solved it.

At first, I was generating the fat jar with the maven-assembly-plugin, which created a file called mavenproject1-0.0.1-SNAPSHOT-jar-with-dependencies.jar. This file gave the same problem as you mentioned when I tried running it.

I think that because it's a Spring Boot application, you need to use their plug-in. I changed my packaging to the spring-boot-maven-plugin and it generates two files: mavenproject1-0.0.1-SNAPSHOT.jar and mavenproject1-0.0.1-SNAPSHOT.jar.original. Just try java -jar target/mavenproject1-0.0.1-SNAPSHOT.jar, and it will hopefully work. :-)

For reference, here is my pom.xml:

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">     <modelVersion>4.0.0</modelVersion>     <groupId>com.company</groupId>     <artifactId>mavenproject1</artifactId>     <version>0.0.1-SNAPSHOT</version>     <packaging>jar</packaging>     <parent>         <groupId>org.springframework.boot</groupId>         <artifactId>spring-boot-starter-parent</artifactId>         <version>1.4.0.RELEASE</version>         <relativePath/>         <!-- lookup parent from repository -->     </parent>     <properties>         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>         <maven.compiler.source>1.8</maven.compiler.source>         <maven.compiler.target>1.8</maven.compiler.target>     </properties>     <dependencies>       <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter</artifactId>         </dependency>         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-test</artifactId>             <scope>test</scope>         </dependency>         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-web</artifactId>         </dependency>         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-configuration-processor</artifactId>             <optional>true</optional>         </dependency>         <dependency>             <groupId>com.company.common</groupId>             <artifactId>common-files</artifactId>             <version>0.0.1-SNAPSHOT</version>         </dependency>     </dependencies>      <build>         <plugins>             <plugin>                 <groupId>org.springframework.boot</groupId>                 <artifactId>spring-boot-maven-plugin</artifactId>                 <configuration>                     <fork>true</fork>                     <mainClass>${start-class}</mainClass>                 </configuration>                   <executions>                     <execution>                       <goals>                         <goal>repackage</goal>                       </goals>                     </execution>                 </executions>             </plugin>             <plugin>               <artifactId>maven-assembly-plugin</artifactId>               <version>2.2-beta-5</version>               <configuration>                 <archive>                   <manifest>                     <addClasspath>true</addClasspath>                     <mainClass>com.company.mavenproject1.MainClass</mainClass>                   </manifest>                 </archive>                 <descriptorRefs>                   <descriptorRef>jar-with-dependencies</descriptorRef>                 </descriptorRefs>               </configuration>               <executions>                 <execution>                   <id>assemble-all</id>                   <phase>package</phase>                   <goals>                     <goal>single</goal>                   </goals>                 </execution>               </executions>             </plugin>         </plugins>     </build> </project> 
like image 155
Benoit Larochelle Avatar answered Sep 21 '22 02:09

Benoit Larochelle