Previously, enforcedPlatform dependencies were using to pull in the constraints defined in spring-boot-dependencies and spring-boot-parent and applied them strictly so that the constrained version had to be used. This worked as intended in Spring Boot's own build but incorrectly enforced those same strict version requirements on external consumers of Spring Boot's modules. This commit reworks how Spring Boot defines its internal dependency management so that platform dependencies are exposed to external consumers while enforced platform dependencies are using internally. See gh-19609
195 lines
6.7 KiB
Groovy
195 lines
6.7 KiB
Groovy
plugins {
|
|
id 'java'
|
|
id 'org.springframework.boot.deployed'
|
|
id 'org.springframework.boot.conventions'
|
|
id 'org.springframework.boot.integration-test'
|
|
id 'org.springframework.boot.internal-dependency-management'
|
|
}
|
|
|
|
description = "Spring Boot CLI"
|
|
|
|
configurations {
|
|
dependenciesBom
|
|
loader
|
|
testRepository
|
|
}
|
|
|
|
dependencies {
|
|
compileOnly project(':spring-boot-project:spring-boot')
|
|
compileOnly 'jakarta.servlet:jakarta.servlet-api'
|
|
compileOnly 'org.codehaus.groovy:groovy-templates'
|
|
compileOnly 'org.springframework:spring-web'
|
|
|
|
dependenciesBom project(path: ':spring-boot-project:spring-boot-dependencies', configuration: 'effectiveBom')
|
|
|
|
implementation platform(project(':spring-boot-project:spring-boot-parent'))
|
|
implementation project(':spring-boot-project:spring-boot-tools:spring-boot-loader-tools')
|
|
implementation 'com.vaadin.external.google:android-json'
|
|
implementation 'jline:jline'
|
|
implementation 'net.sf.jopt-simple:jopt-simple'
|
|
implementation('org.apache.httpcomponents:httpclient') {
|
|
exclude group: 'commons-logging', module: 'commons-logging'
|
|
}
|
|
implementation 'org.apache.maven:maven-model'
|
|
implementation('org.apache.maven:maven-resolver-provider') {
|
|
exclude group: 'com.google.guava', module: 'guava'
|
|
}
|
|
implementation 'org.apache.maven.resolver:maven-resolver-connector-basic'
|
|
implementation 'org.apache.maven.resolver:maven-resolver-transport-file'
|
|
implementation('org.apache.maven.resolver:maven-resolver-transport-http') {
|
|
exclude group: 'org.slf4j', module: 'jcl-over-slf4j'
|
|
}
|
|
implementation 'org.apache.maven:maven-settings-builder'
|
|
implementation 'org.codehaus.groovy:groovy'
|
|
implementation 'org.slf4j:slf4j-simple'
|
|
implementation 'org.sonatype.plexus:plexus-sec-dispatcher'
|
|
implementation('org.sonatype.sisu:sisu-inject-plexus') {
|
|
exclude group: 'javax.enterprise', module: 'cdi-api'
|
|
exclude group: 'org.sonatype.sisu', module: 'sisu-inject-bean'
|
|
}
|
|
implementation 'org.springframework:spring-core'
|
|
implementation 'org.springframework.security:spring-security-crypto'
|
|
|
|
intTestImplementation platform(project(':spring-boot-project:spring-boot-dependencies'))
|
|
intTestImplementation project(':spring-boot-project:spring-boot-tools:spring-boot-loader-tools')
|
|
intTestImplementation project(':spring-boot-project:spring-boot-tools:spring-boot-test-support')
|
|
intTestImplementation 'org.assertj:assertj-core'
|
|
intTestImplementation 'org.junit.jupiter:junit-jupiter'
|
|
intTestImplementation 'org.springframework:spring-core'
|
|
|
|
loader project(':spring-boot-project:spring-boot-tools:spring-boot-loader')
|
|
|
|
testImplementation project(':spring-boot-project:spring-boot')
|
|
testImplementation project(':spring-boot-project:spring-boot-tools:spring-boot-test-support')
|
|
testImplementation project(':spring-boot-project:spring-boot-test')
|
|
testImplementation 'org.assertj:assertj-core'
|
|
testImplementation 'org.codehaus.groovy:groovy-templates'
|
|
testImplementation 'org.junit.jupiter:junit-jupiter'
|
|
testImplementation 'org.mockito:mockito-core'
|
|
testImplementation 'org.springframework:spring-test'
|
|
|
|
testRepository project(path: ':spring-boot-project:spring-boot-starters:spring-boot-starter-actuator', configuration: 'mavenRepository')
|
|
testRepository project(path: ':spring-boot-project:spring-boot-starters:spring-boot-starter-amqp', configuration: 'mavenRepository')
|
|
testRepository project(path: ':spring-boot-project:spring-boot-starters:spring-boot-starter-aop', configuration: 'mavenRepository')
|
|
testRepository project(path: ':spring-boot-project:spring-boot-starters:spring-boot-starter-artemis', configuration: 'mavenRepository')
|
|
testRepository project(path: ':spring-boot-project:spring-boot-starters:spring-boot-starter-batch', configuration: 'mavenRepository')
|
|
testRepository project(path: ':spring-boot-project:spring-boot-starters:spring-boot-starter-data-jpa', configuration: 'mavenRepository')
|
|
testRepository project(path: ':spring-boot-project:spring-boot-starters:spring-boot-starter-jdbc', configuration: 'mavenRepository')
|
|
testRepository project(path: ':spring-boot-project:spring-boot-starters:spring-boot-starter-integration', configuration: 'mavenRepository')
|
|
testRepository project(path: ':spring-boot-project:spring-boot-starters:spring-boot-starter-security', configuration: 'mavenRepository')
|
|
testRepository project(path: ':spring-boot-project:spring-boot-starters:spring-boot-starter-web', configuration: 'mavenRepository')
|
|
}
|
|
|
|
task syncSpringBootDependenciesBom(type: Sync) {
|
|
destinationDir = file("$buildDir/generated-resources/org/springframework/boot/cli/compiler/dependencies")
|
|
from configurations.dependenciesBom
|
|
}
|
|
|
|
task syncTestRepository(type: Sync) {
|
|
destinationDir = file("${buildDir}/test-repository")
|
|
from configurations.testRepository
|
|
}
|
|
|
|
sourceSets {
|
|
main {
|
|
output.dir("$buildDir/generated-resources", builtBy: 'syncSpringBootDependenciesBom')
|
|
}
|
|
}
|
|
|
|
test {
|
|
dependsOn syncTestRepository
|
|
useJUnitPlatform()
|
|
}
|
|
|
|
task fullJar(type: Jar) {
|
|
classifier = 'full'
|
|
entryCompression = 'stored'
|
|
from(configurations.runtimeClasspath) {
|
|
into 'BOOT-INF/lib'
|
|
}
|
|
from(sourceSets.main.output) {
|
|
into 'BOOT-INF/classes'
|
|
}
|
|
into("") {
|
|
from zipTree(configurations.loader.singleFile)
|
|
}
|
|
manifest {
|
|
attributes(
|
|
'Class-Loader': 'groovy.lang.GroovyClassLoader',
|
|
'Main-Class': 'org.springframework.boot.loader.JarLauncher',
|
|
'Start-Class': 'org.springframework.boot.cli.SpringCli'
|
|
)
|
|
}
|
|
}
|
|
|
|
def configureArchive(archive) {
|
|
archive.classifier = 'bin'
|
|
archive.into "spring-${project.version}"
|
|
archive.from(fullJar) {
|
|
rename {
|
|
it.replace("-full", "")
|
|
}
|
|
into 'lib/'
|
|
}
|
|
archive.from(file('src/main/content')) {
|
|
eachFile { it.mode = it.directory ? 0x755 : 0x644 }
|
|
}
|
|
archive.from(file('src/main/executablecontent')) {
|
|
eachFile { it.mode = 0x755 }
|
|
}
|
|
}
|
|
|
|
task zip(type: Zip) {
|
|
classifier = 'bin'
|
|
configureArchive it
|
|
}
|
|
|
|
intTest {
|
|
dependsOn syncTestRepository, zip
|
|
}
|
|
|
|
task tar(type: Tar) {
|
|
compression = 'gzip'
|
|
archiveExtension = 'tar.gz'
|
|
configureArchive it
|
|
}
|
|
|
|
task scoopManifest(type: org.springframework.boot.build.cli.ScoopManifest) {
|
|
dependsOn zip
|
|
outputDir = file("$buildDir/scoop")
|
|
template = file('src/main/scoop/springboot.json')
|
|
archive = zip.archiveFile
|
|
}
|
|
|
|
def scoopManifestArtifact = artifacts.add('archives', file("$buildDir/scoop/springboot.json")) {
|
|
type 'json'
|
|
classifier 'scoop'
|
|
builtBy 'scoopManifest'
|
|
}
|
|
|
|
task homebrewFormula(type: org.springframework.boot.build.cli.HomebrewFormula) {
|
|
dependsOn tar
|
|
outputDir = file("$buildDir/homebrew")
|
|
template = file('src/main/homebrew/springboot.rb')
|
|
archive = tar.archiveFile
|
|
}
|
|
|
|
def homebrewFormulaArtifact = artifacts.add('archives', file("$buildDir/homebrew/springboot.rb")) {
|
|
type 'rb'
|
|
classifier 'homebrew'
|
|
builtBy 'homebrewFormula'
|
|
}
|
|
|
|
publishing {
|
|
publications {
|
|
getByName('maven') {
|
|
artifact fullJar
|
|
artifact tar
|
|
artifact zip
|
|
artifact scoopManifestArtifact
|
|
artifact homebrewFormulaArtifact
|
|
}
|
|
}
|
|
}
|
|
|