Commit 30f79f2f authored by Andy Wilkinson's avatar Andy Wilkinson

Use application name as convention for distribution's base name

Closes gh-12232
parent 60ac2e5c
...@@ -29,6 +29,7 @@ import org.gradle.api.distribution.Distribution; ...@@ -29,6 +29,7 @@ import org.gradle.api.distribution.Distribution;
import org.gradle.api.distribution.DistributionContainer; import org.gradle.api.distribution.DistributionContainer;
import org.gradle.api.file.CopySpec; import org.gradle.api.file.CopySpec;
import org.gradle.api.file.FileCollection; import org.gradle.api.file.FileCollection;
import org.gradle.api.internal.IConventionAware;
import org.gradle.api.plugins.ApplicationPlugin; import org.gradle.api.plugins.ApplicationPlugin;
import org.gradle.api.plugins.ApplicationPluginConvention; import org.gradle.api.plugins.ApplicationPluginConvention;
import org.gradle.jvm.application.scripts.TemplateBasedScriptGenerator; import org.gradle.jvm.application.scripts.TemplateBasedScriptGenerator;
...@@ -49,6 +50,10 @@ final class ApplicationPluginAction implements PluginApplicationAction { ...@@ -49,6 +50,10 @@ final class ApplicationPluginAction implements PluginApplicationAction {
DistributionContainer distributions = project.getExtensions() DistributionContainer distributions = project.getExtensions()
.getByType(DistributionContainer.class); .getByType(DistributionContainer.class);
Distribution distribution = distributions.create("boot"); Distribution distribution = distributions.create("boot");
if (distribution instanceof IConventionAware) {
((IConventionAware) distribution).getConventionMapping().map("baseName",
() -> applicationConvention.getApplicationName() + "-boot");
}
CreateBootStartScripts bootStartScripts = project.getTasks() CreateBootStartScripts bootStartScripts = project.getTasks()
.create("bootStartScripts", CreateBootStartScripts.class); .create("bootStartScripts", CreateBootStartScripts.class);
bootStartScripts.setDescription("Generates OS-specific start scripts to run the" bootStartScripts.setDescription("Generates OS-specific start scripts to run the"
...@@ -71,7 +76,7 @@ final class ApplicationPluginAction implements PluginApplicationAction { ...@@ -71,7 +76,7 @@ final class ApplicationPluginAction implements PluginApplicationAction {
bootStartScripts.getConventionMapping().map("outputDir", bootStartScripts.getConventionMapping().map("outputDir",
() -> new File(project.getBuildDir(), "bootScripts")); () -> new File(project.getBuildDir(), "bootScripts"));
bootStartScripts.getConventionMapping().map("applicationName", bootStartScripts.getConventionMapping().map("applicationName",
() -> applicationConvention.getApplicationName()); applicationConvention::getApplicationName);
CopySpec binCopySpec = project.copySpec().into("bin").from(bootStartScripts); CopySpec binCopySpec = project.copySpec().into("bin").from(bootStartScripts);
binCopySpec.setFileMode(0x755); binCopySpec.setFileMode(0x755);
distribution.getContents().with(binCopySpec); distribution.getContents().with(binCopySpec);
......
...@@ -133,6 +133,21 @@ public class ApplicationPluginActionIntegrationTests { ...@@ -133,6 +133,21 @@ public class ApplicationPluginActionIntegrationTests {
name + "-boot/bin/" + name + ".bat"); 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<String> zipEntryNames(File distribution) throws IOException { private List<String> zipEntryNames(File distribution) throws IOException {
List<String> entryNames = new ArrayList<>(); List<String> entryNames = new ArrayList<>();
try (ZipFile zipFile = new ZipFile(distribution)) { try (ZipFile zipFile = new ZipFile(distribution)) {
......
buildscript {
dependencies {
classpath files(pluginClasspath.split(','))
}
}
apply plugin: 'org.springframework.boot'
apply plugin: 'application'
apply plugin: 'java'
applicationName = 'custom'
bootJar {
mainClassName = 'com.example.ExampleApplication'
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment