Spring Boot + Gradle: как создать исполняемую банку

Я пытаюсь создать исполняемый банку в проекте Spring Boot + Gradle, но пока ничего не работает. Вот простейшая возможная структура. Возможно, что-то не хватает в конфигурации 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

Когда я запускал файл jar, например java -jar 1.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

Что может быть неправильным?

Ответ 1

Я создал проект со всеми источниками, которые вы предоставили. Запуск "построения градиента" с терминала, переключение на /build/libs, а затем запуск "java -jar artifactname" работает отлично.

Вы пытались очистить и перекомпилировать? Какую версию Gradle вы используете?

Ответ 2

В весенней загрузке вы можете напрямую создавать исполняемый файл jar

springBoot { 
    executable = true 
}

Пожалуйста, попробуй

jar{
    baseName = 'myapp' 
    version = 'version'
}

Он создаст банку с именем myapp-version.jar. Do/./myapp-version.jar из команды line.it выполнит

Для получения дополнительной информации см. Следующую ссылку. https://docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html

Ответ 3

В Boot 2.x задачи bootJar и bootWar несут ответственность за упаковку приложения.

Задача bootJar отвечает за создание исполняемого файла jar. Это создается автоматически после применения java-плагина.

В случае, если исполняемый файл jar/war не создается, выполните задание ниже градиента вручную.

$./gradlew bootJar

Аналогично, bootWar создает исполняемый файл войны и создается после применения плагина войны.

Мы можем выполнить задачу bootWar, используя:

$./gradlew bootWar

Обратите внимание, что для Spring Boot 2.x нам нужно использовать Gradle 4.0 или новее.

Ответ 4

Я только недавно попробовал загрузочное приложение Spring с 2.1.4. Выпуск с сборкой Gradle.

Я выполнил следующую команду из каталога в Windows CMD.

gradlew clean build

(после установки в системе необходимого JDK8) я смог увидеть сгенерированный JAR,

<project-directory>/build/libs/<project-name-version.jar>

Надеюсь, это поможет, хотя старый вопрос.

Ссылка:

enter image description here