Merge branch '3.2.x' into 3.3.x

Closes gh-42737
This commit is contained in:
Moritz Halbritter 2024-10-17 14:40:46 +02:00
commit 976fa1d6f5
8 changed files with 65 additions and 38 deletions

View File

@ -35,6 +35,7 @@ import org.antora.gradle.AntoraPlugin;
import org.antora.gradle.AntoraTask;
import org.gradle.StartParameter;
import org.gradle.api.Project;
import org.gradle.api.file.Directory;
import org.gradle.api.logging.LogLevel;
import org.gradle.api.plugins.JavaBasePlugin;
import org.gradle.api.provider.Provider;
@ -86,14 +87,15 @@ public class AntoraConventions {
private void configureGenerateAntoraPlaybookTask(Project project,
GenerateAntoraPlaybook generateAntoraPlaybookTask) {
File nodeProjectDir = getNodeProjectDir(project.getBuildDir());
generateAntoraPlaybookTask.getOutputFile().set(new File(nodeProjectDir, "antora-playbook.yml"));
Provider<Directory> nodeProjectDir = getNodeProjectDir(project);
generateAntoraPlaybookTask.getOutputFile()
.set(nodeProjectDir.map((directory) -> directory.file("antora-playbook.yml")));
}
private void configureCopyAntoraPackageJsonTask(Project project, Copy copyAntoraPackageJsonTask) {
copyAntoraPackageJsonTask
.from(project.getRootProject().file("antora"), (spec) -> spec.include("package.json", "package-lock.json"))
.into(getNodeProjectDir(project.getBuildDir()));
.into(getNodeProjectDir(project));
}
private void configureNpmInstallTask(Project project, NpmInstallTask npmInstallTask, Copy copyAntoraPackageJson) {
@ -117,7 +119,7 @@ public class AntoraConventions {
generateAntoraYmlTask.dependsOn(dependencyVersionsTask);
generateAntoraYmlTask.setProperty("componentName", "boot");
generateAntoraYmlTask.setProperty("outputFile",
new File(project.getBuildDir(), "generated/docs/antora-yml/antora.yml"));
project.getLayout().getBuildDirectory().file("generated/docs/antora-yml/antora.yml"));
generateAntoraYmlTask.setProperty("yml", getDefaultYml(project));
generateAntoraYmlTask.getAsciidocAttributes().putAll(getAsciidocAttributes(project, dependencyVersionsTask));
}
@ -202,14 +204,13 @@ public class AntoraConventions {
}
private void configureNodeExtension(Project project, NodeExtension nodeExtension) {
File buildDir = project.getBuildDir();
nodeExtension.getWorkDir().set(buildDir.toPath().resolve(".gradle/nodejs").toFile());
nodeExtension.getNpmWorkDir().set(buildDir.toPath().resolve(".gradle/npm").toFile());
nodeExtension.getNodeProjectDir().set(getNodeProjectDir(buildDir));
nodeExtension.getWorkDir().set(project.getLayout().getBuildDirectory().dir(".gradle/nodejs"));
nodeExtension.getNpmWorkDir().set(project.getLayout().getBuildDirectory().dir(".gradle/npm"));
nodeExtension.getNodeProjectDir().set(getNodeProjectDir(project));
}
private File getNodeProjectDir(File buildDir) {
return buildDir.toPath().resolve(".gradle/nodeproject").toFile();
private Provider<Directory> getNodeProjectDir(Project project) {
return project.getLayout().getBuildDirectory().dir(".gradle/nodeproject");
}
}

View File

@ -58,7 +58,7 @@ public class MavenRepositoryPlugin implements Plugin<Project> {
public void apply(Project project) {
project.getPlugins().apply(MavenPublishPlugin.class);
PublishingExtension publishing = project.getExtensions().getByType(PublishingExtension.class);
File repositoryLocation = new File(project.getBuildDir(), "maven-repository");
File repositoryLocation = project.getLayout().getBuildDirectory().dir("maven-repository").get().getAsFile();
publishing.getRepositories().maven((mavenRepository) -> {
mavenRepository.setName("project");
mavenRepository.setUrl(repositoryLocation.toURI());

View File

@ -174,7 +174,8 @@ public abstract class GenerateAntoraPlaybook extends DefaultTask {
private void addDir(Map<String, Object> data) {
Path playbookDir = toRealPath(getOutputFile().get().getAsFile().toPath()).getParent();
Path outputDir = toRealPath(getProject().getBuildDir().toPath().resolve("site"));
Path outputDir = toRealPath(
getProject().getLayout().getBuildDirectory().dir("site").get().getAsFile().toPath());
data.put("output", Map.of("dir", "." + File.separator + playbookDir.relativize(outputDir).toString()));
}

View File

@ -93,7 +93,8 @@ public class AutoConfigurationPlugin implements Plugin<Project> {
.getByName(SourceSet.MAIN_SOURCE_SET_NAME);
task.setSourceSet(main);
task.dependsOn(main.getClassesTaskName());
task.getOutputFile().set(new File(project.getBuildDir(), "auto-configuration-metadata.properties"));
task.getOutputFile()
.set(project.getLayout().getBuildDirectory().file("auto-configuration-metadata.properties"));
project.getArtifacts()
.add(AutoConfigurationPlugin.AUTO_CONFIGURATION_METADATA_CONFIGURATION_NAME, task.getOutputFile(),
(artifact) -> artifact.builtBy(task));

View File

@ -135,7 +135,11 @@ public class BomExtension {
.all((task) -> {
Sync syncBom = this.project.getTasks().create("syncBom", Sync.class);
syncBom.dependsOn(task);
File generatedBomDir = new File(this.project.getBuildDir(), "generated/bom");
File generatedBomDir = this.project.getLayout()
.getBuildDirectory()
.dir("generated/bom")
.get()
.getAsFile();
syncBom.setDestinationDir(generatedBomDir);
syncBom.from(((GenerateMavenPom) task).getDestination(), (pom) -> pom.rename((name) -> "pom.xml"));
try {
@ -144,7 +148,12 @@ public class BomExtension {
getClass().getClassLoader().getResourceAsStream("effective-bom-settings.xml"),
StandardCharsets.UTF_8))
.replace("localRepositoryPath",
new File(this.project.getBuildDir(), "local-m2-repository").getAbsolutePath());
this.project.getLayout()
.getBuildDirectory()
.dir("local-m2-repository")
.get()
.getAsFile()
.getAbsolutePath());
syncBom.from(this.project.getResources().getText().fromString(settingsXmlContent),
(settingsXml) -> settingsXml.rename((name) -> "settings.xml"));
}
@ -154,8 +163,11 @@ public class BomExtension {
MavenExec generateEffectiveBom = this.project.getTasks()
.create("generateEffectiveBom", MavenExec.class);
generateEffectiveBom.getProjectDir().set(generatedBomDir);
File effectiveBom = new File(this.project.getBuildDir(),
"generated/effective-bom/" + this.project.getName() + "-effective-bom.xml");
File effectiveBom = this.project.getLayout()
.getBuildDirectory()
.file("generated/effective-bom/" + this.project.getName() + "-effective-bom.xml")
.get()
.getAsFile();
generateEffectiveBom.args("--settings", "settings.xml", "help:effective-pom",
"-Doutput=" + effectiveBom);
generateEffectiveBom.dependsOn(syncBom);

View File

@ -58,6 +58,7 @@ import org.gradle.api.component.AdhocComponentWithVariants;
import org.gradle.api.component.ConfigurationVariantDetails;
import org.gradle.api.component.SoftwareComponent;
import org.gradle.api.file.CopySpec;
import org.gradle.api.file.Directory;
import org.gradle.api.file.DirectoryProperty;
import org.gradle.api.file.FileCollection;
import org.gradle.api.file.RegularFileProperty;
@ -65,6 +66,7 @@ import org.gradle.api.model.ObjectFactory;
import org.gradle.api.plugins.JavaLibraryPlugin;
import org.gradle.api.plugins.JavaPlugin;
import org.gradle.api.plugins.JavaPluginExtension;
import org.gradle.api.provider.Provider;
import org.gradle.api.publish.PublishingExtension;
import org.gradle.api.publish.maven.MavenPublication;
import org.gradle.api.publish.maven.plugins.MavenPublishPlugin;
@ -170,11 +172,11 @@ public class MavenPluginPlugin implements Plugin<Project> {
RuntimeClasspathMavenRepository runtimeClasspathMavenRepository = project.getTasks()
.create("runtimeClasspathMavenRepository", RuntimeClasspathMavenRepository.class);
runtimeClasspathMavenRepository.getOutputDir()
.set(new File(project.getBuildDir(), "runtime-classpath-repository"));
.set(project.getLayout().getBuildDirectory().dir("runtime-classpath-repository"));
project.getDependencies()
.components((components) -> components.all(MavenRepositoryComponentMetadataRule.class));
Sync task = project.getTasks().create("populateTestMavenRepository", Sync.class);
task.setDestinationDir(new File(project.getBuildDir(), "test-maven-repository"));
task.setDestinationDir(project.getLayout().getBuildDirectory().dir("test-maven-repository").get().getAsFile());
task.with(copyIntTestMavenRepositoryFiles(project, runtimeClasspathMavenRepository));
task.dependsOn(project.getTasks().getByName(MavenRepositoryPlugin.PUBLISH_TO_PROJECT_REPOSITORY_TASK_NAME));
project.getTasks().getByName(IntegrationTestPlugin.INT_TEST_TASK_NAME).dependsOn(task);
@ -188,7 +190,7 @@ public class MavenPluginPlugin implements Plugin<Project> {
RuntimeClasspathMavenRepository runtimeClasspathMavenRepository) {
CopySpec copySpec = project.copySpec();
copySpec.from(project.getConfigurations().getByName(MavenRepositoryPlugin.MAVEN_REPOSITORY_CONFIGURATION_NAME));
copySpec.from(new File(project.getBuildDir(), "maven-repository"));
copySpec.from(project.getLayout().getBuildDirectory().dir("maven-repository"));
copySpec.from(runtimeClasspathMavenRepository);
return copySpec;
}
@ -197,29 +199,29 @@ public class MavenPluginPlugin implements Plugin<Project> {
DocumentPluginGoals task = project.getTasks().create("documentPluginGoals", DocumentPluginGoals.class);
File pluginXml = new File(generatePluginDescriptorTask.getOutputs().getFiles().getSingleFile(), "plugin.xml");
task.getPluginXml().set(pluginXml);
task.getOutputDir().set(new File(project.getBuildDir(), "generated/docs/maven-plugin-goals/"));
task.getOutputDir().set(project.getLayout().getBuildDirectory().dir("docs/generated/goals/"));
task.dependsOn(generatePluginDescriptorTask);
}
private MavenExec addGenerateHelpMojoTask(Project project, Jar jarTask) {
File helpMojoDir = new File(project.getBuildDir(), "help-mojo");
Provider<Directory> helpMojoDir = project.getLayout().getBuildDirectory().dir("help-mojo");
MavenExec task = createGenerateHelpMojoTask(project, helpMojoDir);
task.dependsOn(createSyncHelpMojoInputsTask(project, helpMojoDir));
includeHelpMojoInJar(jarTask, task);
return task;
}
private MavenExec createGenerateHelpMojoTask(Project project, File helpMojoDir) {
private MavenExec createGenerateHelpMojoTask(Project project, Provider<Directory> helpMojoDir) {
MavenExec task = project.getTasks().create("generateHelpMojo", MavenExec.class);
task.getProjectDir().set(helpMojoDir);
task.args("org.apache.maven.plugins:maven-plugin-plugin:3.6.1:helpmojo");
task.getOutputs().dir(new File(helpMojoDir, "target/generated-sources/plugin"));
task.getOutputs().dir(helpMojoDir.map((directory) -> directory.dir("target/generated-sources/plugin")));
return task;
}
private Sync createSyncHelpMojoInputsTask(Project project, File helpMojoDir) {
private Sync createSyncHelpMojoInputsTask(Project project, Provider<Directory> helpMojoDir) {
Sync task = project.getTasks().create("syncHelpMojoInputs", Sync.class);
task.setDestinationDir(helpMojoDir);
task.setDestinationDir(helpMojoDir.get().getAsFile());
File pomFile = new File(project.getProjectDir(), "src/maven/resources/pom.xml");
task.from(pomFile, (copy) -> replaceVersionPlaceholder(copy, project));
return task;
@ -231,8 +233,10 @@ public class MavenPluginPlugin implements Plugin<Project> {
}
private MavenExec addGeneratePluginDescriptorTask(Project project, Jar jarTask, MavenExec generateHelpMojoTask) {
File pluginDescriptorDir = new File(project.getBuildDir(), "plugin-descriptor");
File generatedHelpMojoDir = new File(project.getBuildDir(), "generated/sources/helpMojo");
Provider<Directory> pluginDescriptorDir = project.getLayout().getBuildDirectory().dir("plugin-descriptor");
Provider<Directory> generatedHelpMojoDir = project.getLayout()
.getBuildDirectory()
.dir("generated/sources/helpMojo");
SourceSet mainSourceSet = getMainSourceSet(project);
project.getTasks().withType(Javadoc.class, this::setJavadocOptions);
FormatHelpMojoSource formattedHelpMojoSource = createFormatHelpMojoSource(project, generateHelpMojoTask,
@ -258,7 +262,7 @@ public class MavenPluginPlugin implements Plugin<Project> {
}
private FormatHelpMojoSource createFormatHelpMojoSource(Project project, MavenExec generateHelpMojoTask,
File generatedHelpMojoDir) {
Provider<Directory> generatedHelpMojoDir) {
FormatHelpMojoSource formatHelpMojoSource = project.getTasks()
.create("formatHelpMojoSource", FormatHelpMojoSource.class);
formatHelpMojoSource.setGenerator(generateHelpMojoTask);
@ -266,9 +270,10 @@ public class MavenPluginPlugin implements Plugin<Project> {
return formatHelpMojoSource;
}
private Sync createSyncPluginDescriptorInputs(Project project, File destination, SourceSet sourceSet) {
private Sync createSyncPluginDescriptorInputs(Project project, Provider<Directory> destination,
SourceSet sourceSet) {
Sync pluginDescriptorInputs = project.getTasks().create("syncPluginDescriptorInputs", Sync.class);
pluginDescriptorInputs.setDestinationDir(destination);
pluginDescriptorInputs.setDestinationDir(destination.get().getAsFile());
File pomFile = new File(project.getProjectDir(), "src/maven/resources/pom.xml");
pluginDescriptorInputs.from(pomFile, (copy) -> replaceVersionPlaceholder(copy, project));
pluginDescriptorInputs.from(sourceSet.getOutput().getClassesDirs(), (sync) -> sync.into("target/classes"));
@ -277,12 +282,13 @@ public class MavenPluginPlugin implements Plugin<Project> {
return pluginDescriptorInputs;
}
private MavenExec createGeneratePluginDescriptorTask(Project project, File mavenDir) {
private MavenExec createGeneratePluginDescriptorTask(Project project, Provider<Directory> mavenDir) {
MavenExec generatePluginDescriptor = project.getTasks().create("generatePluginDescriptor", MavenExec.class);
generatePluginDescriptor.args("org.apache.maven.plugins:maven-plugin-plugin:3.6.1:descriptor");
generatePluginDescriptor.getOutputs().dir(new File(mavenDir, "target/classes/META-INF/maven"));
generatePluginDescriptor.getOutputs()
.dir(mavenDir.map((directory) -> directory.dir("target/classes/META-INF/maven")));
generatePluginDescriptor.getInputs()
.dir(new File(mavenDir, "target/classes/org"))
.dir(mavenDir.map((directory) -> directory.dir("target/classes/org")))
.withPathSensitivity(PathSensitivity.RELATIVE)
.withPropertyName("plugin classes");
generatePluginDescriptor.getProjectDir().set(mavenDir);
@ -298,7 +304,7 @@ public class MavenPluginPlugin implements Plugin<Project> {
TaskProvider<PrepareMavenBinaries> task = project.getTasks()
.register("prepareMavenBinaries", PrepareMavenBinaries.class,
(prepareMavenBinaries) -> prepareMavenBinaries.getOutputDir()
.set(new File(project.getBuildDir(), "maven-binaries")));
.set(project.getLayout().getBuildDirectory().dir("maven-binaries")));
project.getTasks()
.getByName(IntegrationTestPlugin.INT_TEST_TASK_NAME)
.getInputs()

View File

@ -16,7 +16,6 @@
package org.springframework.boot.build.starters;
import java.io.File;
import java.util.Map;
import java.util.TreeMap;
@ -24,10 +23,12 @@ import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.artifacts.Configuration;
import org.gradle.api.artifacts.ConfigurationContainer;
import org.gradle.api.file.RegularFile;
import org.gradle.api.plugins.JavaBasePlugin;
import org.gradle.api.plugins.JavaLibraryPlugin;
import org.gradle.api.plugins.JavaPlugin;
import org.gradle.api.plugins.PluginContainer;
import org.gradle.api.provider.Provider;
import org.gradle.api.tasks.bundling.Jar;
import org.springframework.boot.build.ConventionsPlugin;
@ -56,7 +57,7 @@ public class StarterPlugin implements Plugin<Project> {
ConfigurationContainer configurations = project.getConfigurations();
Configuration runtimeClasspath = configurations.getByName(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME);
starterMetadata.setDependencies(runtimeClasspath);
File destination = new File(project.getBuildDir(), "starter-metadata.properties");
Provider<RegularFile> destination = project.getLayout().getBuildDirectory().file("starter-metadata.properties");
starterMetadata.getDestination().set(destination);
configurations.create("starterMetadata");
project.getArtifacts()

View File

@ -61,7 +61,12 @@ class ArchitectureCheckTests {
}
File failureReport(ArchitectureCheck architectureCheck) {
return new File(architectureCheck.getProject().getBuildDir(), "checkArchitecture/failure-report.txt");
return architectureCheck.getProject()
.getLayout()
.getBuildDirectory()
.file("checkArchitecture/failure-report.txt")
.get()
.getAsFile();
}
@Test