java - Spring 启动 + Gradle : how to build executable jar

标签 java spring-boot gradle

我正在尝试在 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')
}

主要配置文件:

@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

当我运行像 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

可能出了什么问题?

最佳答案

在 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 或更高版本。

关于java - Spring 启动 + Gradle : how to build executable jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46939455/

相关文章:

java - REST - HTTP 状态 405;不允许的方法;请求方法 'PUT'不支持错误

java - 无法构建 Android 应用程序 - 重复的 zip 条目

gradle - 使用 gradle 构建 cmake ExternalProject

java - 如何在Java中分别变换形状的每一边?

java - Selenium Webdriver 在表单中输入多行文本而不提交

java - hibernate Cascade 中的多对一 ="none"

java - 自定义 log4j2 附加程序在 java 11 中不起作用

java - 如何使用Spring云数据流转换Mysql数据http调用?

java - 条件依赖

java - 如何在 Java 中使用 Mockito 模拟 AWS API