From 386d678d99b17af57c9df2e4153b65fb333b6abd Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Fri, 24 Apr 2020 17:16:18 +0100 Subject: [PATCH] Use Gradle's CreateStartScripts task with 6.4 and later Fixes gh-20759 --- .../gradle/plugin/ApplicationPluginAction.java | 14 ++++++++++++-- .../gradle/junit/GradleCompatibilityExtension.java | 2 +- .../ApplicationPluginActionIntegrationTests.gradle | 2 +- 3 files changed, 14 insertions(+), 4 deletions(-) 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 881dc0c16a8..f36974ca720 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 @@ -36,6 +36,8 @@ import org.gradle.api.plugins.ApplicationPluginConvention; import org.gradle.api.provider.Property; import org.gradle.api.provider.Provider; import org.gradle.jvm.application.scripts.TemplateBasedScriptGenerator; +import org.gradle.jvm.application.tasks.CreateStartScripts; +import org.gradle.util.GradleVersion; import org.springframework.boot.gradle.tasks.application.CreateBootStartScripts; @@ -53,8 +55,8 @@ final class ApplicationPluginAction implements PluginApplicationAction { DistributionContainer distributions = project.getExtensions().getByType(DistributionContainer.class); Distribution distribution = distributions.create("boot"); configureBaseNameConvention(project, applicationConvention, distribution); - CreateBootStartScripts bootStartScripts = project.getTasks().create("bootStartScripts", - CreateBootStartScripts.class); + CreateStartScripts bootStartScripts = project.getTasks().create("bootStartScripts", + determineCreateStartScriptsClass()); bootStartScripts .setDescription("Generates OS-specific start scripts to run the project as a Spring Boot application."); ((TemplateBasedScriptGenerator) bootStartScripts.getUnixStartScriptGenerator()) @@ -79,6 +81,14 @@ final class ApplicationPluginAction implements PluginApplicationAction { distribution.getContents().with(binCopySpec); } + private Class determineCreateStartScriptsClass() { + return isGradle64OrLater() ? CreateStartScripts.class : CreateBootStartScripts.class; + } + + private boolean isGradle64OrLater() { + return GradleVersion.current().getBaseVersion().compareTo(GradleVersion.version("6.4")) >= 0; + } + @SuppressWarnings("unchecked") private void configureBaseNameConvention(Project project, ApplicationPluginConvention applicationConvention, Distribution distribution) { diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleCompatibilityExtension.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleCompatibilityExtension.java index efd7e8c4d3a..c7eb1ac01e0 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleCompatibilityExtension.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleCompatibilityExtension.java @@ -39,7 +39,7 @@ import org.springframework.boot.gradle.testkit.GradleBuildExtension; public final class GradleCompatibilityExtension implements TestTemplateInvocationContextProvider { private static final List GRADLE_VERSIONS = Arrays.asList("default", "5.0", "5.1.1", "5.2.1", "5.3.1", - "5.4.1", "5.5.1", "5.6.4", "6.0.1", "6.1.1", "6.2.2", "6.3"); + "5.4.1", "5.5.1", "5.6.4", "6.0.1", "6.1.1", "6.2.2", "6.3", "6.4"); @Override public Stream provideTestTemplateInvocationContexts(ExtensionContext context) { diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests.gradle index bf327cfdb7d..c0ea97c0954 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests.gradle +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/ApplicationPluginActionIntegrationTests.gradle @@ -31,7 +31,7 @@ task('javaCompileEncoding') { task('startScriptsDefaultJvmOpts') { doFirst { - tasks.withType(org.springframework.boot.gradle.tasks.application.CreateBootStartScripts) { + tasks.getByName("bootStartScripts") { println "$name defaultJvmOpts = $defaultJvmOpts" } }