我试图在Spring Boot + Gradle项目中构建一个可执行jar,但现在没有任何作用。这是最简单的结构。可能,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')
}
主配置文件:
@RestController
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@GetMapping(value = "/")
public String index() {
return "index";
}
}
当我运行像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
可能出现什么问题?
答案 0 :(得分:9)
我创建了一个包含您提供的所有资源的项目。运行" gradle build"从终端,切换到/ build / libs然后运行" java -jar artifactname"工作得很好。
您是否尝试过清理并重新编译?您使用的是哪个版本的Gradle?
答案 1 :(得分:5)
在spring boot中,您可以通过
直接创建可执行jar文件springBoot {
executable = true
}
请尝试
jar{
baseName = 'myapp'
version = 'version'
}
它将创建名为myapp-version.jar的jar 从命令行执行./myapp-version.jar.it将执行
有关详细信息,请参阅以下链接。 https://docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html
答案 2 :(得分:5)
在Boot 2.x中,bootJar和bootWar任务负责打包应用程序。
bootJar任务负责创建可执行jar文件。一旦应用Java插件,该文件就会自动创建。
如果未生成可执行jar / war文件,请手动运行以下gradle任务。
$./gradlew bootJar
类似地,bootWar生成可执行的war文件并在应用war插件后被创建。
我们可以使用以下命令执行bootWar任务:
$./gradlew bootWar
请注意,对于Spring Boot 2.x,我们需要使用Gradle 4.0或更高版本。
答案 3 :(得分:0)
我最近刚刚尝试了2.1.4版的Spring引导应用程序。通过Gradle构建发布。
我从Windows CMD中的目录中运行了以下命令。
gradlew clean build
(在系统中安装了必需的JDK8之后),我能够看到在其下生成的JAR,
<project-directory>/build/libs/<project-name-version.jar>
希望这对旧问题有所帮助。
参考:
答案 4 :(得分:0)
我的两分钱。
在使用spring-boot时,如果要自定义MANIFEST.MF
文件,则需要设置bootJar
任务,该任务不适用于默认的jar
任务。
bootJar {
manifest {
attributes 'Start-Class': 'com.baeldung.DemoApplication'
}
}
答案 5 :(得分:0)
如果您尝试使 .jar 文件可执行,以便在 systemd 服务等中使用。您必须编辑 bootJar
任务并启用 launchScript
。
build.gradle
bootJar {
launchScript()
}
或使用 Gradle Kotlin DSL build.gradle.kts
tasks {
bootJar {
launchScript()
}
}
您现在应该能够将项目的 .jar 文件作为可执行文件运行。