web-dev-qa-db-ja.com

マルチモジュールのSpring BootプロジェクトのGradle依存プラグイン

Gradleプラグインspring-boot-dependenciesおよびspring-bootを使用するマルチモジュールプロジェクトで、正しいGradle構成はどのように見えますか?

次のプロジェクト設定があります。

parent
  |
  + build.gradle
  |
  + alpha
  |   |
  |   + build.gradle
  |
  + beta
  |   |
  |   + build.gradle
  • parentモジュールには、一般的なプロジェクト構成が含まれています。
  • alphaモジュールは spring-boot-dependencies bomで指定されたバージョン番号を使用して依存関係をインポートするモジュールですが、結果は標準jarです。
  • betaモジュールはalphaに依存するモジュールであり、結果は実行可能なSpring Boot jarファイル(すべての依存関係を含む)です。したがって、このプロジェクトにはspring-boot-dependenciesプラグインとspring-bootプラグインの両方が必要です。

GradleファイルをDRYに保つために、共通モジュールスクリプトを親のbuild.gradleファイルに抽出しました。

以下のプロジェクト構成を使用して$ gradle buildを実行しようとすると、結果は次のようになります。

> Plugin with id 'io.spring.dependency-management' not found.

親gradle.build

allprojects {
    group = "com.example"
    version '0.0.1-SNAPSHOT'

    ext {
        dependencyManagementPluginVersion = '0.5.3.RELEASE'
        springBootVersion = '1.3.0.RC1'
    }

    apply plugin: 'Java'
    apply plugin: 'Eclipse'
    apply plugin: 'idea'
}

subprojects {
    sourceCompatibility = 1.8
    targetCompatibility = 1.8

    buildscript {
        repositories {
            jcenter()
            maven { url "https://repo.spring.io/snapshot" }
            maven { url "https://repo.spring.io/milestone" }
        }
        dependencies {
            classpath("io.spring.gradle:dependency-management-plugin:${dependencyManagementPluginVersion}")
            classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        }
    }

    apply plugin: 'io.spring.dependency-management'

    dependencyManagement {
        imports {
            mavenBom("org.springframework.boot:spring-boot-dependencies:${springBootVersion}")
//            mavenBom("org.springframework.boot:spring-boot-starter-parent:${springBootVersion}")
        }
    }
}

alpha build.gradle

dependencies {
    compile('org.springframework:spring-web')
}

beta gradle.build

apply plugin: 'spring-boot'

dependencies {
    compile project(':alpha')
    compile('org.springframework.boot:spring-boot-starter')
    compile('org.springframework.boot:spring-boot-starter-web')
}

コメント:

  • Spring Boot 1.3.0.M1でのspring-bootプラグインの動作 変更されました
  • Gradleバージョン:2.8
  • Spring Bootバージョン1.3.0.RC1
19
matsev

parent/build.gradleは次のように再配置する必要があります:

buildscript {
    ext {
        dependencyManagementPluginVersion = '0.5.3.RELEASE'
        springBootVersion = '1.3.0.RC1'
    }
    repositories {
        jcenter()
        maven { url "https://repo.spring.io/snapshot" }
        maven { url "https://repo.spring.io/milestone" }
    }
    dependencies {
        classpath("io.spring.gradle:dependency-management-plugin:${dependencyManagementPluginVersion}")
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

allprojects {
    group = "com.example"
    version '0.0.1-SNAPSHOT'

    apply plugin: 'Java'
    apply plugin: 'Eclipse'
    apply plugin: 'idea'
}

subprojects {
    sourceCompatibility = 1.8
    targetCompatibility = 1.8

    apply plugin: 'io.spring.dependency-management'

    dependencyManagement {
        imports {
            mavenBom("org.springframework.boot:spring-boot-dependencies:${springBootVersion}")
//          mavenBom("org.springframework.boot:spring-boot-starter-parent:${springBootVersion}")
        }
    }
}

問題は、サブプロジェクトのbuildscriptブロックが実際に適切に構成されているという事実にありますが、間違った場所にあります。このsubprojectsブロックはサブプロジェクトに関連していますが、評価されますスクリプト内宣言されました。適用しようとしたプラグインに依存関係が宣言されていませんでした。

20
Opal