Java Spring Boot + Gradle:如何构建可执行的 jar
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/46939455/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Spring Boot + Gradle: how to build executable jar
提问by sva605
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.
我正在尝试在 Spring Boot + Gradle 项目中构建一个可执行的 jar,但目前没有任何效果。这是最简单的结构。Gradle 配置中可能缺少某些内容。
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:
当我运行像 java -jar 1.jar 这样的 jar 文件时,我得到了这个异常:
[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?
可能有什么问题?
采纳答案by moritz.krischke
I created a project with all the sources you provided. Running "gradle build" from terminal, switching to /build/libs and then running "java -jar artifactname" works just fine.
我使用您提供的所有资源创建了一个项目。从终端运行“gradle build”,切换到/build/libs,然后运行“java -jar artifactname”就可以了。
Have you tried to clean and recompile? Which Version of Gradle are you using?
您是否尝试清理并重新编译?您使用的是哪个版本的 Gradle?
回答by GaneshSreeju
In spring boot you can directly create executable jar file by
在 spring boot 中,您可以通过以下方式直接创建可执行的 jar 文件
springBoot {
executable = true
}
Please try
请尝试
jar{
baseName = 'myapp'
version = 'version'
}
It will create jar with name myapp-version.jar Do ./myapp-version.jar from command line.it will execute
它将创建名为 myapp-version.jar 的 jar 从命令行执行 ./myapp-version.jar。它将执行
Refer following link for more info. https://docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html
有关更多信息,请参阅以下链接。https://docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html
回答by Rajesh D
In Boot 2.x, the bootJar and bootWar tasks are responsible for packaging the application.
在 Boot 2.x 中,bootJar 和 bootWar 任务负责打包应用程序。
The bootJar task is responsible for creating the executable jar file. This is created automatically once the java plugin is applied.
bootJar 任务负责创建可执行的 jar 文件。一旦应用了 java 插件,它就会自动创建。
In case the executable jar/war file is not generated run the below gradle task manually.
如果未生成可执行 jar/war 文件,请手动运行以下 gradle 任务。
$./gradlew bootJar
Similarly, bootWar generates an executable war file and gets created once the war plugin is applied.
类似地,bootWar 生成一个可执行的 war 文件,并在应用 war 插件后创建。
We can execute the bootWar task using:
我们可以使用以下命令执行 bootWar 任务:
$./gradlew bootWar
Note that for Spring Boot 2.x, we need to use Gradle 4.0 or later.
请注意,对于 Spring Boot 2.x,我们需要使用 Gradle 4.0 或更高版本。
回答by Santosh Kumar Arjunan
I just recently tried a Spring boot application with 2.1.4.Release with Gradle build.
我最近刚刚尝试了一个带有 2.1.4.Release 和 Gradle 构建的 Spring 启动应用程序。
I ran the following command from the directory in Windows CMD.
我从 Windows CMD 的目录中运行了以下命令。
gradlew clean build
(upon required JDK8 installed in the system), I was able to see the JAR generated under,
(在系统中需要安装JDK8),我能够看到下生成的JAR,
<project-directory>/build/libs/<project-name-version.jar>
Hope this helps though older question.
希望这有助于虽然较旧的问题。
Reference:
参考: