From 650ee408976d8299c89dd22c56d5738324bd4a66 Mon Sep 17 00:00:00 2001 From: Lars Grefer Date: Mon, 14 Feb 2022 00:50:04 +0100 Subject: [PATCH 1/3] Avoid eager creation of the bootStartScripts task. see https://docs.gradle.org/7.4/userguide/task_configuration_avoidance.html --- .../plugin/ApplicationPluginAction.java | 44 ++++++++++--------- 1 file changed, 24 insertions(+), 20 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 5fbffeaa8731..ab7fab8c39c1 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 @@ -31,6 +31,7 @@ import org.gradle.api.file.FileCollection; import org.gradle.api.plugins.ApplicationPlugin; import org.gradle.api.plugins.ApplicationPluginConvention; +import org.gradle.api.tasks.TaskProvider; import org.gradle.jvm.application.scripts.TemplateBasedScriptGenerator; import org.gradle.jvm.application.tasks.CreateStartScripts; @@ -49,26 +50,29 @@ public void execute(Project project) { Distribution distribution = distributions.create("boot"); distribution.getDistributionBaseName() .convention((project.provider(() -> applicationConvention.getApplicationName() + "-boot"))); - CreateStartScripts bootStartScripts = project.getTasks().create("bootStartScripts", CreateStartScripts.class); - bootStartScripts - .setDescription("Generates OS-specific start scripts to run the project as a Spring Boot application."); - ((TemplateBasedScriptGenerator) bootStartScripts.getUnixStartScriptGenerator()) - .setTemplate(project.getResources().getText().fromString(loadResource("/unixStartScript.txt"))); - ((TemplateBasedScriptGenerator) bootStartScripts.getWindowsStartScriptGenerator()) - .setTemplate(project.getResources().getText().fromString(loadResource("/windowsStartScript.txt"))); - project.getConfigurations().all((configuration) -> { - if ("bootArchives".equals(configuration.getName())) { - CopySpec libCopySpec = project.copySpec().into("lib") - .from((Callable) () -> configuration.getArtifacts().getFiles()); - libCopySpec.setFileMode(0644); - distribution.getContents().with(libCopySpec); - bootStartScripts.setClasspath(configuration.getArtifacts().getFiles()); - } - }); - bootStartScripts.getConventionMapping().map("outputDir", () -> new File(project.getBuildDir(), "bootScripts")); - bootStartScripts.getConventionMapping().map("applicationName", applicationConvention::getApplicationName); - bootStartScripts.getConventionMapping().map("defaultJvmOpts", - applicationConvention::getApplicationDefaultJvmArgs); + TaskProvider bootStartScripts = project.getTasks().register("bootStartScripts", + CreateStartScripts.class, (bss) -> { + bss.setDescription( + "Generates OS-specific start scripts to run the project as a Spring Boot application."); + ((TemplateBasedScriptGenerator) bss.getUnixStartScriptGenerator()).setTemplate( + project.getResources().getText().fromString(loadResource("/unixStartScript.txt"))); + ((TemplateBasedScriptGenerator) bss.getWindowsStartScriptGenerator()).setTemplate( + project.getResources().getText().fromString(loadResource("/windowsStartScript.txt"))); + + project.getConfigurations().all((configuration) -> { + if ("bootArchives".equals(configuration.getName())) { + CopySpec libCopySpec = project.copySpec().into("lib") + .from((Callable) () -> configuration.getArtifacts().getFiles()); + libCopySpec.setFileMode(0644); + distribution.getContents().with(libCopySpec); + bss.setClasspath(configuration.getArtifacts().getFiles()); + } + }); + bss.getConventionMapping().map("outputDir", () -> new File(project.getBuildDir(), "bootScripts")); + bss.getConventionMapping().map("applicationName", applicationConvention::getApplicationName); + bss.getConventionMapping().map("defaultJvmOpts", + applicationConvention::getApplicationDefaultJvmArgs); + }); CopySpec binCopySpec = project.copySpec().into("bin").from(bootStartScripts); binCopySpec.setFileMode(0755); distribution.getContents().with(binCopySpec); From ffcc94723709700fb6543f488b33c1c9b6295f51 Mon Sep 17 00:00:00 2001 From: Lars Grefer Date: Mon, 14 Feb 2022 01:04:03 +0100 Subject: [PATCH 2/3] Avoid eager creation of the compile*Java tasks see https://docs.gradle.org/7.4/userguide/task_configuration_avoidance.html --- .../boot/gradle/plugin/JavaPluginAction.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/JavaPluginAction.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/JavaPluginAction.java index 0b8c8fb80abd..a9ea3fd4c97b 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/JavaPluginAction.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/JavaPluginAction.java @@ -167,15 +167,16 @@ private JavaPluginConvention javaPluginConvention(Project project) { } private void configureUtf8Encoding(Project project) { - project.afterEvaluate((evaluated) -> evaluated.getTasks().withType(JavaCompile.class, (compile) -> { - if (compile.getOptions().getEncoding() == null) { - compile.getOptions().setEncoding("UTF-8"); - } - })); + project.afterEvaluate( + (evaluated) -> evaluated.getTasks().withType(JavaCompile.class).configureEach((compile) -> { + if (compile.getOptions().getEncoding() == null) { + compile.getOptions().setEncoding("UTF-8"); + } + })); } private void configureParametersCompilerArg(Project project) { - project.getTasks().withType(JavaCompile.class, (compile) -> { + project.getTasks().withType(JavaCompile.class).configureEach((compile) -> { List compilerArgs = compile.getOptions().getCompilerArgs(); if (!compilerArgs.contains(PARAMETERS_COMPILER_ARG)) { compilerArgs.add(PARAMETERS_COMPILER_ARG); @@ -184,8 +185,8 @@ private void configureParametersCompilerArg(Project project) { } private void configureAdditionalMetadataLocations(Project project) { - project.afterEvaluate((evaluated) -> evaluated.getTasks().withType(JavaCompile.class, - this::configureAdditionalMetadataLocations)); + project.afterEvaluate((evaluated) -> evaluated.getTasks().withType(JavaCompile.class) + .configureEach(this::configureAdditionalMetadataLocations)); } private void configureAdditionalMetadataLocations(JavaCompile compile) { From 265cfc2ba0085de19b68af0c7342c0a9fca0476e Mon Sep 17 00:00:00 2001 From: Lars Grefer Date: Mon, 14 Feb 2022 01:06:20 +0100 Subject: [PATCH 3/3] Avoid eager creation of the compile*Kotlin tasks see https://docs.gradle.org/7.4/userguide/task_configuration_avoidance.html --- .../boot/gradle/plugin/KotlinPluginAction.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/KotlinPluginAction.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/KotlinPluginAction.java index 06774b3075da..60ce2785d209 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/KotlinPluginAction.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/KotlinPluginAction.java @@ -47,8 +47,8 @@ private String getKotlinVersion(Project project) { } private void enableJavaParametersOption(Project project) { - project.getTasks().withType(KotlinCompile.class, - (compile) -> compile.getKotlinOptions().setJavaParameters(true)); + project.getTasks().withType(KotlinCompile.class) + .configureEach((compile) -> compile.getKotlinOptions().setJavaParameters(true)); } @Override