Gradle плагин зависимостей в мультимодульном Spring проекте загрузки
Как выглядит правильная конфигурация Gradle в проекте с несколькими модулями, в котором используются плагины Gradle spring-boot-dependencies
и spring-boot
?
У меня есть следующая настройка проекта:
parent
|
+ build.gradle
|
+ alpha
| |
| + build.gradle
|
+ beta
| |
| + build.gradle
- Модуль
parent
содержит общую конфигурацию проекта.
- Модуль
alpha
- это модуль, в котором я хотел бы импортировать зависимости, используя номера версий, указанные в spring -boot-dependencies bom, но результат стандартной банки.
- Модуль
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
было изменено в Spring Boot 1.3.0.M1
- Gradle версия: 2.8
- Spring Загрузочная версия 1.3.0.RC1
Ответы
Ответ 1
Оказывается, что 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
относится к подпроектам, но он будет оцениваться в script, он был объявлен, и не было никаких зависимостей, объявленных для плагина, который он пытался применить.