From 6d8c33301659415e8df093ac09b5215a5f67ff19 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 26 Sep 2017 12:48:08 +0100 Subject: [PATCH] Replace convention mappings with PropertyState and Provider Closes gh-9891 --- .../boot/gradle/dsl/SpringBootExtension.java | 9 ++-- .../plugin/ApplicationPluginAction.java | 8 +-- .../application/CreateBootStartScripts.java | 50 +++++++++++++++++++ .../gradle/tasks/buildinfo/BuildInfo.java | 20 +++++--- 4 files changed, 71 insertions(+), 16 deletions(-) diff --git a/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/dsl/SpringBootExtension.java b/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/dsl/SpringBootExtension.java index 8cbda847a1..9429f1304f 100644 --- a/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/dsl/SpringBootExtension.java +++ b/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/dsl/SpringBootExtension.java @@ -17,7 +17,6 @@ package org.springframework.boot.gradle.dsl; import java.io.File; -import java.util.concurrent.Callable; import org.gradle.api.Action; import org.gradle.api.Project; @@ -87,11 +86,9 @@ public class SpringBootExtension { properties.setArtifact(determineArtifactBaseName()); } }); - bootBuildInfo.getConventionMapping() - .map("destinationDir", - (Callable) () -> new File( - determineMainSourceSetResourcesOutputDir(), - "META-INF")); + bootBuildInfo.setDestinationDir(this.project + .provider(() -> new File(determineMainSourceSetResourcesOutputDir(), + "META-INF"))); }); if (configurer != null) { configurer.execute(bootBuildInfo); diff --git a/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ApplicationPluginAction.java b/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ApplicationPluginAction.java index 592d2acc8c..6bc4660266 100644 --- a/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ApplicationPluginAction.java +++ b/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ApplicationPluginAction.java @@ -68,10 +68,10 @@ final class ApplicationPluginAction implements PluginApplicationAction { bootStartScripts.setClasspath(configuration.getArtifacts().getFiles()); } }); - bootStartScripts.getConventionMapping().map("outputDir", - () -> new File(project.getBuildDir(), "bootScripts")); - bootStartScripts.getConventionMapping().map("applicationName", - () -> applicationConvention.getApplicationName()); + bootStartScripts.setOutputDir( + project.provider(() -> new File(project.getBuildDir(), "bootScripts"))); + bootStartScripts.setApplicationName( + project.provider(() -> applicationConvention.getApplicationName())); CopySpec binCopySpec = project.copySpec().into("bin").from(bootStartScripts); binCopySpec.setFileMode(0x755); distribution.getContents().with(binCopySpec); diff --git a/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/application/CreateBootStartScripts.java b/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/application/CreateBootStartScripts.java index 334cdcf8bf..d6fbc6ab0b 100644 --- a/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/application/CreateBootStartScripts.java +++ b/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/application/CreateBootStartScripts.java @@ -16,7 +16,13 @@ package org.springframework.boot.gradle.tasks.application; +import java.io.File; + +import org.gradle.api.provider.PropertyState; +import org.gradle.api.provider.Provider; +import org.gradle.api.tasks.Input; import org.gradle.api.tasks.Optional; +import org.gradle.api.tasks.OutputDirectory; import org.gradle.jvm.application.tasks.CreateStartScripts; /** @@ -27,10 +33,54 @@ import org.gradle.jvm.application.tasks.CreateStartScripts; */ public class CreateBootStartScripts extends CreateStartScripts { + private final PropertyState outputDir = getProject().property(File.class); + + private final PropertyState applicationName = getProject() + .property(String.class); + @Override @Optional public String getMainClassName() { return super.getMainClassName(); } + @Input + @Override + public String getApplicationName() { + return this.applicationName.getOrNull(); + } + + @Override + public void setApplicationName(String applicationName) { + this.applicationName.set(applicationName); + } + + /** + * Sets the application name to the value from the given + * {@code applicationNameProvider}. + * @param applicationNameProvider the provider of the application name + */ + public void setApplicationName(Provider applicationNameProvider) { + this.applicationName.set(applicationNameProvider); + } + + @Override + @OutputDirectory + public File getOutputDir() { + return this.outputDir.getOrNull(); + } + + @Override + public void setOutputDir(File outputDir) { + this.outputDir.set(outputDir); + } + + /** + * Sets the output directory to the value from the given {@code outputDirProvider}. + * @param outputDirProvider the provider of the output directory + */ + public void setOutputDir(Provider outputDirProvider) { + this.outputDir.set(outputDirProvider); + } + } diff --git a/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/buildinfo/BuildInfo.java b/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/buildinfo/BuildInfo.java index 273f7600e7..af526b4f00 100644 --- a/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/buildinfo/BuildInfo.java +++ b/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/buildinfo/BuildInfo.java @@ -26,6 +26,8 @@ import org.gradle.api.Action; import org.gradle.api.Project; import org.gradle.api.Task; import org.gradle.api.internal.ConventionTask; +import org.gradle.api.provider.PropertyState; +import org.gradle.api.provider.Provider; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.OutputDirectory; import org.gradle.api.tasks.TaskAction; @@ -44,7 +46,7 @@ public class BuildInfo extends ConventionTask { private final BuildInfoProperties properties = new BuildInfoProperties(getProject()); - private File destinationDir; + private PropertyState destinationDir = getProject().property(File.class); /** * Generates the {@code build-info.properties} file in the configured @@ -76,23 +78,30 @@ public class BuildInfo extends ConventionTask { */ @OutputDirectory public File getDestinationDir() { - return this.destinationDir != null ? this.destinationDir + return this.destinationDir.isPresent() ? this.destinationDir.get() : getProject().getBuildDir(); } /** * Sets the directory to which the {@code build-info.properties} file will be written. - * * @param destinationDir the destination directory */ public void setDestinationDir(File destinationDir) { - this.destinationDir = destinationDir; + this.destinationDir.set(destinationDir); + } + + /** + * Sets the directory to which the {@code build-info.properties} file will be written + * to the value from the given {@code destinationDirProvider}. + * @param destinationDirProvider the provider of the destination directory + */ + public void setDestinationDir(Provider destinationDirProvider) { + this.destinationDir.set(destinationDirProvider); } /** * Returns the {@link BuildInfoProperties properties} that will be included in the * {@code build-info.properties} file. - * * @return the properties */ @Input @@ -102,7 +111,6 @@ public class BuildInfo extends ConventionTask { /** * Executes the given {@code action} on the {@link #getProperties()} properties. - * * @param action the action */ public void properties(Action action) {