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
プラグインの動作 変更されました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
ブロックはサブプロジェクトに関連していますが、評価されますスクリプト内宣言されました。適用しようとしたプラグインに依存関係が宣言されていませんでした。