Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring Boot + Gradle: how to build executable jar

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";     } } 

enter image description here

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?

like image 629
sva605 Avatar asked Oct 25 '17 18:10

sva605


People also ask

How do I create a jar in spring boot gradle?

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.

How do I create a runnable jar with gradle?

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.


1 Answers

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.

like image 60
Rajesh Avatar answered Oct 07 '22 10:10

Rajesh