
Previously, Spring Boot's modules published Gradle Module Metadata (GMM) the declared a platform dependency on spring-boot-dependencies. This provided versions for each module's own dependencies but also had they unwanted side-effect of pulling in spring-boot-dependencies constraints which would influence the version of other dependencies declared in the same configuration. This was undesirable as users should be able to opt in to this level of dependency management, either by using the dependency management plugin or by using Gradle's built-in support via a platform dependency on spring-boot-dependencies. This commit reworks how Spring Boot's build uses spring-boot-dependencies and spring-boot-parent to provide its own dependency management. Configurations that aren't seen by consumers are configured to extend a dependencyManagement configuration that has an enforced platform dependency on spring-boot-parent. This enforces spring-boot-parent's version constraints on Spring Boot's build without making them visible to consumers. To ensure that the versions that Spring Boot has been built against are visible to consumers, the Maven publication that produces pom files and GMM for the published modules is configured to use the resolved versions from the module's runtime classpath. Fixes gh-21911
192 lines
6.5 KiB
Groovy
192 lines
6.5 KiB
Groovy
plugins {
|
|
id "java"
|
|
id "org.springframework.boot.deployed"
|
|
id "org.springframework.boot.conventions"
|
|
id "org.springframework.boot.integration-test"
|
|
}
|
|
|
|
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(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(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
|
|
}
|
|
|
|
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")) {
|
|
dirMode = 0755
|
|
fileMode = 0644
|
|
}
|
|
archive.from(file("src/main/executablecontent")) {
|
|
fileMode = 0755
|
|
}
|
|
}
|
|
|
|
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
|
|
}
|
|
}
|
|
}
|
|
|