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 } } }