Use application name as convention for distribution's base name

Closes gh-12232
This commit is contained in:
Andy Wilkinson 2018-02-27 12:56:50 +00:00
parent 60ac2e5c09
commit 30f79f2fb1
3 changed files with 36 additions and 1 deletions

View File

@ -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);

View File

@ -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<String> zipEntryNames(File distribution) throws IOException {
List<String> entryNames = new ArrayList<>();
try (ZipFile zipFile = new ZipFile(distribution)) {

View File

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