Avoid using Gradle APIs that trigger eager task creation

See gh-29762
This commit is contained in:
Lars Grefer 2022-02-14 00:50:04 +01:00 committed by Andy Wilkinson
parent 622e6206db
commit 7cd87acd73
3 changed files with 35 additions and 30 deletions

View File

@ -31,6 +31,7 @@ import org.gradle.api.file.CopySpec;
import org.gradle.api.file.FileCollection; import org.gradle.api.file.FileCollection;
import org.gradle.api.plugins.ApplicationPlugin; import org.gradle.api.plugins.ApplicationPlugin;
import org.gradle.api.plugins.ApplicationPluginConvention; import org.gradle.api.plugins.ApplicationPluginConvention;
import org.gradle.api.tasks.TaskProvider;
import org.gradle.jvm.application.scripts.TemplateBasedScriptGenerator; import org.gradle.jvm.application.scripts.TemplateBasedScriptGenerator;
import org.gradle.jvm.application.tasks.CreateStartScripts; import org.gradle.jvm.application.tasks.CreateStartScripts;
@ -49,26 +50,29 @@ final class ApplicationPluginAction implements PluginApplicationAction {
Distribution distribution = distributions.create("boot"); Distribution distribution = distributions.create("boot");
distribution.getDistributionBaseName() distribution.getDistributionBaseName()
.convention((project.provider(() -> applicationConvention.getApplicationName() + "-boot"))); .convention((project.provider(() -> applicationConvention.getApplicationName() + "-boot")));
CreateStartScripts bootStartScripts = project.getTasks().create("bootStartScripts", CreateStartScripts.class); TaskProvider<CreateStartScripts> bootStartScripts = project.getTasks().register("bootStartScripts",
bootStartScripts CreateStartScripts.class, (bss) -> {
.setDescription("Generates OS-specific start scripts to run the project as a Spring Boot application."); bss.setDescription(
((TemplateBasedScriptGenerator) bootStartScripts.getUnixStartScriptGenerator()) "Generates OS-specific start scripts to run the project as a Spring Boot application.");
.setTemplate(project.getResources().getText().fromString(loadResource("/unixStartScript.txt"))); ((TemplateBasedScriptGenerator) bss.getUnixStartScriptGenerator()).setTemplate(
((TemplateBasedScriptGenerator) bootStartScripts.getWindowsStartScriptGenerator()) project.getResources().getText().fromString(loadResource("/unixStartScript.txt")));
.setTemplate(project.getResources().getText().fromString(loadResource("/windowsStartScript.txt"))); ((TemplateBasedScriptGenerator) bss.getWindowsStartScriptGenerator()).setTemplate(
project.getConfigurations().all((configuration) -> { project.getResources().getText().fromString(loadResource("/windowsStartScript.txt")));
if ("bootArchives".equals(configuration.getName())) {
CopySpec libCopySpec = project.copySpec().into("lib") project.getConfigurations().all((configuration) -> {
.from((Callable<FileCollection>) () -> configuration.getArtifacts().getFiles()); if ("bootArchives".equals(configuration.getName())) {
libCopySpec.setFileMode(0644); CopySpec libCopySpec = project.copySpec().into("lib")
distribution.getContents().with(libCopySpec); .from((Callable<FileCollection>) () -> configuration.getArtifacts().getFiles());
bootStartScripts.setClasspath(configuration.getArtifacts().getFiles()); libCopySpec.setFileMode(0644);
} distribution.getContents().with(libCopySpec);
}); bss.setClasspath(configuration.getArtifacts().getFiles());
bootStartScripts.getConventionMapping().map("outputDir", () -> new File(project.getBuildDir(), "bootScripts")); }
bootStartScripts.getConventionMapping().map("applicationName", applicationConvention::getApplicationName); });
bootStartScripts.getConventionMapping().map("defaultJvmOpts", bss.getConventionMapping().map("outputDir", () -> new File(project.getBuildDir(), "bootScripts"));
applicationConvention::getApplicationDefaultJvmArgs); bss.getConventionMapping().map("applicationName", applicationConvention::getApplicationName);
bss.getConventionMapping().map("defaultJvmOpts",
applicationConvention::getApplicationDefaultJvmArgs);
});
CopySpec binCopySpec = project.copySpec().into("bin").from(bootStartScripts); CopySpec binCopySpec = project.copySpec().into("bin").from(bootStartScripts);
binCopySpec.setFileMode(0755); binCopySpec.setFileMode(0755);
distribution.getContents().with(binCopySpec); distribution.getContents().with(binCopySpec);

View File

@ -167,15 +167,16 @@ final class JavaPluginAction implements PluginApplicationAction {
} }
private void configureUtf8Encoding(Project project) { private void configureUtf8Encoding(Project project) {
project.afterEvaluate((evaluated) -> evaluated.getTasks().withType(JavaCompile.class, (compile) -> { project.afterEvaluate(
if (compile.getOptions().getEncoding() == null) { (evaluated) -> evaluated.getTasks().withType(JavaCompile.class).configureEach((compile) -> {
compile.getOptions().setEncoding("UTF-8"); if (compile.getOptions().getEncoding() == null) {
} compile.getOptions().setEncoding("UTF-8");
})); }
}));
} }
private void configureParametersCompilerArg(Project project) { private void configureParametersCompilerArg(Project project) {
project.getTasks().withType(JavaCompile.class, (compile) -> { project.getTasks().withType(JavaCompile.class).configureEach((compile) -> {
List<String> compilerArgs = compile.getOptions().getCompilerArgs(); List<String> compilerArgs = compile.getOptions().getCompilerArgs();
if (!compilerArgs.contains(PARAMETERS_COMPILER_ARG)) { if (!compilerArgs.contains(PARAMETERS_COMPILER_ARG)) {
compilerArgs.add(PARAMETERS_COMPILER_ARG); compilerArgs.add(PARAMETERS_COMPILER_ARG);
@ -184,8 +185,8 @@ final class JavaPluginAction implements PluginApplicationAction {
} }
private void configureAdditionalMetadataLocations(Project project) { private void configureAdditionalMetadataLocations(Project project) {
project.afterEvaluate((evaluated) -> evaluated.getTasks().withType(JavaCompile.class, project.afterEvaluate((evaluated) -> evaluated.getTasks().withType(JavaCompile.class)
this::configureAdditionalMetadataLocations)); .configureEach(this::configureAdditionalMetadataLocations));
} }
private void configureAdditionalMetadataLocations(JavaCompile compile) { private void configureAdditionalMetadataLocations(JavaCompile compile) {

View File

@ -47,8 +47,8 @@ class KotlinPluginAction implements PluginApplicationAction {
} }
private void enableJavaParametersOption(Project project) { private void enableJavaParametersOption(Project project) {
project.getTasks().withType(KotlinCompile.class, project.getTasks().withType(KotlinCompile.class)
(compile) -> compile.getKotlinOptions().setJavaParameters(true)); .configureEach((compile) -> compile.getKotlinOptions().setJavaParameters(true));
} }
@Override @Override