I'm trying to build an executable jar in Spring Boot + Gradle project, but for now nothing works. Here is the simplest possible structure. Possibly, something is missing in Gradle configuration.
Gradle:
buildscript { ext { springBootVersion = '1.5.8.RELEASE' } repositories { mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") } } apply plugin: 'java' apply plugin: 'org.springframework.boot' group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = 1.8 repositories { mavenCentral() } jar { manifest { attributes 'Main-Class': 'com.example.demo.DemoApplication' } from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } } dependencies { compile('org.springframework.boot:spring-boot-starter-web') }
Main config file:
@RestController @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } @GetMapping(value = "/") public String index() { return "index"; } }
When I ran the jar file like java -jar 1.jar, I got this exception:
[main] ERROR org.springframework.boot.SpringApplication - Applicati on startup failed org.springframework.beans.factory.BeanDefinitionStoreException: Failed to proces s import candidates for configuration class [com.example.demo.DemoApplication]; nested exception is java.lang.IllegalArgumentException: No auto configuration cl asses found in META-INF/spring.factories. If you are using a custom packaging, m ake sure that file is correct. at org.springframework.context.annotation.ConfigurationClassParser.proce ssDeferredImportSelectors(ConfigurationClassParser.java:556) at org.springframework.context.annotation.ConfigurationClassParser.parse (ConfigurationClassParser.java:185) at org.springframework.context.annotation.ConfigurationClassPostProcesso r.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:308) at org.springframework.context.annotation.ConfigurationClassPostProcesso r.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:228) at org.springframework.context.support.PostProcessorRegistrationDelegate .invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.ja va:272) at org.springframework.context.support.PostProcessorRegistrationDelegate .invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:92) at org.springframework.context.support.AbstractApplicationContext.invoke BeanFactoryPostProcessors(AbstractApplicationContext.java:687) at org.springframework.context.support.AbstractApplicationContext.refres h(AbstractApplicationContext.java:525) at org.springframework.boot.context.embedded.EmbeddedWebApplicationConte xt.refresh(EmbeddedWebApplicationContext.java:122) at org.springframework.boot.SpringApplication.refresh(SpringApplication. java:693) at org.springframework.boot.SpringApplication.refreshContext(SpringAppli cation.java:360) at org.springframework.boot.SpringApplication.run(SpringApplication.java :303) at org.springframework.boot.SpringApplication.run(SpringApplication.java :1118) at org.springframework.boot.SpringApplication.run(SpringApplication.java :1107) at com.example.demo.DemoApplication.main(DemoApplication.java:13) Caused by: java.lang.IllegalArgumentException: No auto configuration classes fou nd 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:277) at org.springframework.boot.autoconfigure.AutoConfigurationImportSelecto r.getCandidateConfigurations(AutoConfigurationImportSelector.java:153) at org.springframework.boot.autoconfigure.AutoConfigurationImportSelecto r.selectImports(AutoConfigurationImportSelector.java:95) at org.springframework.context.annotation.ConfigurationClassParser.proce ssDeferredImportSelectors(ConfigurationClassParser.java:547) ... 14 common frames omitted
What might be wrong?
x, the bootJar and bootWar tasks are responsible for packaging the application. The bootJar task is responsible for creating the executable jar file. This is created automatically once the java plugin is applied. In case the executable jar/war file is not generated run the below gradle task manually.
In its simplest form, creating an executable JAR with Gradle is just a matter of adding the appropriate entries to the manifest. However, it's much more common to have dependencies that need to be included on the classpath, making this approach tricky in practice.
In Boot 2.x, the bootJar and bootWar tasks are responsible for packaging the application.
The bootJar task is responsible for creating the executable jar file. This is created automatically once the java plugin is applied.
In case the executable jar/war file is not generated run the below gradle task manually.
$./gradlew bootJar
Similarly, bootWar generates an executable war file and gets created once the war plugin is applied.
We can execute the bootWar task using:
$./gradlew bootWar
Note that for Spring Boot 2.x, we need to use Gradle 4.0 or later.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With