Java 弹簧靴&x2B;Gradle:如何构建可执行jar
我正试图在SpringBoot+Gradle项目中构建一个可执行的jar,但目前一切都不起作用。这是最简单的结构。Gradle配置中可能缺少某些内容 格拉德尔:Java 弹簧靴&x2B;Gradle:如何构建可执行jar,java,spring-boot,gradle,Java,Spring Boot,Gradle,我正试图在SpringBoot+Gradle项目中构建一个可执行的jar,但目前一切都不起作用。这是最简单的结构。Gradle配置中可能缺少某些内容 格拉德尔: buildscript { ext { springBootVersion = '1.5.8.RELEASE' } repositories { mavenCentral() } dependencies { classpath("org.sprin
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')
}
主配置文件:
@RestController
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@GetMapping(value = "/")
public String index() {
return "index";
}
}
当我像java-jar1.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
可能有什么问题?在spring boot中,您可以通过以下方式直接创建可执行的jar文件
springBoot {
executable = true
}
请试一试
jar{
baseName = 'myapp'
version = 'version'
}
它将创建名为myapp-version.jar的jar
从命令行执行./myapp-version.jar。它将执行
有关更多信息,请参阅以下链接 我用您提供的所有资源创建了一个项目。从终端运行“gradlebuild”,切换到/build/libs,然后运行“java-jarartifactname”就可以了
您是否尝试过清理和重新编译?您使用的是哪个版本的Gradle?在Boot2.x中,bootJar和bootWar任务负责打包应用程序 bootJar任务负责创建可执行jar文件。一旦应用了java插件,它就会自动创建 如果未生成可执行jar/war文件,请手动运行下面的gradle任务
$./gradlew bootJar
类似地,bootWar生成一个可执行的war文件,并在应用war插件后创建
我们可以使用以下方法执行引导战任务:
$./gradlew bootWar
请注意,对于Spring Boot 2.x,我们需要使用Gradle 4.0或更高版本。我最近刚刚尝试了一个带有Gradle build的2.1.4.Release版本的Spring Boot应用程序 我从Windows CMD中的目录运行了以下命令
gradlew clean build
(在系统中安装了所需的JDK8之后),我能够看到在下生成的JAR
<project-directory>/build/libs/<project-name-version.jar>
/build/libs/
希望这有助于解决老问题
参考:
我的两分钱
如果要自定义MANIFEST.MF
文件,使用spring boot时,需要设置bootJar
任务,它在默认jar
任务上不起作用
bootJar {
manifest {
attributes 'Start-Class': 'com.baeldung.DemoApplication'
}
}
bootJar
任务并启用launchScript
build.gradle
bootJar {
launchScript()
}
或者使用Gradle Kotlin DSLbuild.Gradle.kts
tasks {
bootJar {
launchScript()
}
}
现在,您应该可以将项目的.jar文件作为可执行文件运行。我不知道必须使用“gradle build”,而是尝试使用“gradle jar”。现在,如何使用gradle build命令提供spring概要文件非常好!非常感谢。我尝试使用5.6.4(OracleJDK1.8)和Lombok;添加spring boot{}产生了一个问题..但是指定bootJar是可行的。你能简单介绍一下你用来启动jar文件的命令吗