tutorial - El complemento de dependencia de Gradle en un proyecto de arranque múltiple de módulos
spring boot install (1)
¿Cómo se ve una configuración correcta de Gradle en un proyecto de múltiples módulos que utiliza los complementos de Gradle spring-boot-dependencies
spring-boot
?
Tengo la siguiente configuración de proyecto:
parent
|
+ build.gradle
|
+ alpha
| |
| + build.gradle
|
+ beta
| |
| + build.gradle
- El módulo
parent
contiene la configuración común del proyecto. - El módulo
alpha
es un módulo en el que me gustaría importar dependencias usando los números de versiones especificados en el spring-boot-dependencies , pero el resultado es un jar estándar. - El módulo
beta
es un módulo que depende dealpha
y el resultado es un archivo jar ejecutable Spring Boot (incluidas todas las dependencias). En consecuencia, este proyecto necesita tanto lasspring-boot-dependencies
spring-boot
como el complemento despring-boot
.
Para mantener los archivos de Gradle en SECO, he extraído scripts de módulos comunes al archivo build.gradle
los padres.
Los intentos de ejecutar la $ gradle build
utilizando la configuración del proyecto a continuación dan como resultado:
> Plugin with id ''io.spring.dependency-management'' not found.
padre 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}")
}
}
}
alfa 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'')
}
Comentarios:
- El comportamiento del complemento
spring-boot
se cambió en Spring Boot 1.3.0.M1 - Versión de Gradle: 2.8
- Versión Spring Boot 1.3.0.RC1
Resulta que parent/build.gradle
debe reorganizar de la siguiente manera:
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}")
}
}
}
El problema radica en el hecho de que el bloque de buildscript
para subproyectos se configuró bien pero ... en un lugar equivocado. Este bloque de subprojects
se relaciona con los subproyectos, pero se evaluará en el script que se declaró y no se declararon dependencias para el complemento que estaba tratando de aplicar.