Skip to content

Commit 650ee40

Browse files
committed
Avoid eager creation of the bootStartScripts task.
see https://docs.gradle.org/7.4/userguide/task_configuration_avoidance.html
1 parent 4ee7b4b commit 650ee40

File tree

1 file changed

+24
-20
lines changed
  • spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin

1 file changed

+24
-20
lines changed

spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/ApplicationPluginAction.java

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.gradle.api.file.FileCollection;
3232
import org.gradle.api.plugins.ApplicationPlugin;
3333
import org.gradle.api.plugins.ApplicationPluginConvention;
34+
import org.gradle.api.tasks.TaskProvider;
3435
import org.gradle.jvm.application.scripts.TemplateBasedScriptGenerator;
3536
import org.gradle.jvm.application.tasks.CreateStartScripts;
3637

@@ -49,26 +50,29 @@ public void execute(Project project) {
4950
Distribution distribution = distributions.create("boot");
5051
distribution.getDistributionBaseName()
5152
.convention((project.provider(() -> applicationConvention.getApplicationName() + "-boot")));
52-
CreateStartScripts bootStartScripts = project.getTasks().create("bootStartScripts", CreateStartScripts.class);
53-
bootStartScripts
54-
.setDescription("Generates OS-specific start scripts to run the project as a Spring Boot application.");
55-
((TemplateBasedScriptGenerator) bootStartScripts.getUnixStartScriptGenerator())
56-
.setTemplate(project.getResources().getText().fromString(loadResource("/unixStartScript.txt")));
57-
((TemplateBasedScriptGenerator) bootStartScripts.getWindowsStartScriptGenerator())
58-
.setTemplate(project.getResources().getText().fromString(loadResource("/windowsStartScript.txt")));
59-
project.getConfigurations().all((configuration) -> {
60-
if ("bootArchives".equals(configuration.getName())) {
61-
CopySpec libCopySpec = project.copySpec().into("lib")
62-
.from((Callable<FileCollection>) () -> configuration.getArtifacts().getFiles());
63-
libCopySpec.setFileMode(0644);
64-
distribution.getContents().with(libCopySpec);
65-
bootStartScripts.setClasspath(configuration.getArtifacts().getFiles());
66-
}
67-
});
68-
bootStartScripts.getConventionMapping().map("outputDir", () -> new File(project.getBuildDir(), "bootScripts"));
69-
bootStartScripts.getConventionMapping().map("applicationName", applicationConvention::getApplicationName);
70-
bootStartScripts.getConventionMapping().map("defaultJvmOpts",
71-
applicationConvention::getApplicationDefaultJvmArgs);
53+
TaskProvider<CreateStartScripts> bootStartScripts = project.getTasks().register("bootStartScripts",
54+
CreateStartScripts.class, (bss) -> {
55+
bss.setDescription(
56+
"Generates OS-specific start scripts to run the project as a Spring Boot application.");
57+
((TemplateBasedScriptGenerator) bss.getUnixStartScriptGenerator()).setTemplate(
58+
project.getResources().getText().fromString(loadResource("/unixStartScript.txt")));
59+
((TemplateBasedScriptGenerator) bss.getWindowsStartScriptGenerator()).setTemplate(
60+
project.getResources().getText().fromString(loadResource("/windowsStartScript.txt")));
61+
62+
project.getConfigurations().all((configuration) -> {
63+
if ("bootArchives".equals(configuration.getName())) {
64+
CopySpec libCopySpec = project.copySpec().into("lib")
65+
.from((Callable<FileCollection>) () -> configuration.getArtifacts().getFiles());
66+
libCopySpec.setFileMode(0644);
67+
distribution.getContents().with(libCopySpec);
68+
bss.setClasspath(configuration.getArtifacts().getFiles());
69+
}
70+
});
71+
bss.getConventionMapping().map("outputDir", () -> new File(project.getBuildDir(), "bootScripts"));
72+
bss.getConventionMapping().map("applicationName", applicationConvention::getApplicationName);
73+
bss.getConventionMapping().map("defaultJvmOpts",
74+
applicationConvention::getApplicationDefaultJvmArgs);
75+
});
7276
CopySpec binCopySpec = project.copySpec().into("bin").from(bootStartScripts);
7377
binCopySpec.setFileMode(0755);
7478
distribution.getContents().with(binCopySpec);

0 commit comments

Comments
 (0)