From 30f79f2fb1aa8b2179c9311917d3b93fe93017b5 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 27 Feb 2018 12:56:50 +0000 Subject: [PATCH] Use application name as convention for distribution's base name Closes gh-12232 --- .../gradle/plugin/ApplicationPluginAction.java | 7 ++++++- .../ApplicationPluginActionIntegrationTests.java | 15 +++++++++++++++ ...ameCanBeUsedToCustomizeDistributionName.gradle | 15 +++++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests-applicationNameCanBeUsedToCustomizeDistributionName.gradle diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ApplicationPluginAction.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ApplicationPluginAction.java index 6ea22479f7..aa9ad97b3f 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ApplicationPluginAction.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ApplicationPluginAction.java @@ -29,6 +29,7 @@ import org.gradle.api.distribution.Distribution; import org.gradle.api.distribution.DistributionContainer; import org.gradle.api.file.CopySpec; import org.gradle.api.file.FileCollection; +import org.gradle.api.internal.IConventionAware; import org.gradle.api.plugins.ApplicationPlugin; import org.gradle.api.plugins.ApplicationPluginConvention; import org.gradle.jvm.application.scripts.TemplateBasedScriptGenerator; @@ -49,6 +50,10 @@ final class ApplicationPluginAction implements PluginApplicationAction { DistributionContainer distributions = project.getExtensions() .getByType(DistributionContainer.class); Distribution distribution = distributions.create("boot"); + if (distribution instanceof IConventionAware) { + ((IConventionAware) distribution).getConventionMapping().map("baseName", + () -> applicationConvention.getApplicationName() + "-boot"); + } CreateBootStartScripts bootStartScripts = project.getTasks() .create("bootStartScripts", CreateBootStartScripts.class); bootStartScripts.setDescription("Generates OS-specific start scripts to run the" @@ -71,7 +76,7 @@ final class ApplicationPluginAction implements PluginApplicationAction { bootStartScripts.getConventionMapping().map("outputDir", () -> new File(project.getBuildDir(), "bootScripts")); bootStartScripts.getConventionMapping().map("applicationName", - () -> applicationConvention.getApplicationName()); + applicationConvention::getApplicationName); CopySpec binCopySpec = project.copySpec().into("bin").from(bootStartScripts); binCopySpec.setFileMode(0x755); distribution.getContents().with(binCopySpec); diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests.java index dccde4f345..d6b244752b 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests.java @@ -133,6 +133,21 @@ public class ApplicationPluginActionIntegrationTests { name + "-boot/bin/" + name + ".bat"); } + @Test + public void applicationNameCanBeUsedToCustomizeDistributionName() throws IOException { + assertThat( + this.gradleBuild.build("bootDistTar").task(":bootDistTar").getOutcome()) + .isEqualTo(TaskOutcome.SUCCESS); + File distribution = new File(this.gradleBuild.getProjectDir(), + "build/distributions/custom-boot.tar"); + assertThat(distribution).isFile(); + String name = this.gradleBuild.getProjectDir().getName(); + assertThat(tarEntryNames(distribution)).containsExactlyInAnyOrder("custom-boot/", + "custom-boot/lib/", "custom-boot/lib/" + name + ".jar", + "custom-boot/bin/", "custom-boot/bin/custom", + "custom-boot/bin/custom.bat"); + } + private List zipEntryNames(File distribution) throws IOException { List entryNames = new ArrayList<>(); try (ZipFile zipFile = new ZipFile(distribution)) { diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests-applicationNameCanBeUsedToCustomizeDistributionName.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests-applicationNameCanBeUsedToCustomizeDistributionName.gradle new file mode 100644 index 0000000000..3627c85681 --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests-applicationNameCanBeUsedToCustomizeDistributionName.gradle @@ -0,0 +1,15 @@ +buildscript { + dependencies { + classpath files(pluginClasspath.split(',')) + } +} + +apply plugin: 'org.springframework.boot' +apply plugin: 'application' +apply plugin: 'java' + +applicationName = 'custom' + +bootJar { + mainClassName = 'com.example.ExampleApplication' +}