web-dev-qa-db-ja.com

Spring Boot + Gradle:実行可能jarの構築方法

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

何が悪いのでしょうか?

15
sva605

あなたが提供したすべてのソースでプロジェクトを作成しました。ターミナルから「gradle build」を実行し、/ build/libsに切り替えてから「Java -jar artifactname」を実行すると正常に機能します。

クリーンアップして再コンパイルしようとしましたか?どのバージョンのGradleを使用していますか?

10
moritz.krischke

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以降を使用する必要があることに注意してください。

10
Rajesh Samson

春のブートでは、実行可能なjarファイルを直接作成できます

springBoot { 
    executable = true 
}

してみてください

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

コマンドラインからmyapp-version.jar Do ./myapp-version.jarという名前のjarを作成します。実行します

詳細については、次のリンクを参照してください。 https://docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html

5
GaneshSreeju

私は最近、Gradleビルドを使用した2.1.4リリースのSpringブートアプリケーションを試しました。

Windows CMDのディレクトリから次のコマンドを実行しました。

gradlew clean build

(必要なJDK8がシステムにインストールされている場合)、生成されたJARを確認できました。

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

これが古い質問にも役立つことを願っています。

参照:

enter image description here