diff --git a/buildSrc/src/main/java/org/springframework/boot/build/AntoraConventions.java b/buildSrc/src/main/java/org/springframework/boot/build/AntoraConventions.java index 841afc50998..a38d946d47e 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/AntoraConventions.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/AntoraConventions.java @@ -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 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 getNodeProjectDir(Project project) { + return project.getLayout().getBuildDirectory().dir(".gradle/nodeproject"); } } diff --git a/buildSrc/src/main/java/org/springframework/boot/build/MavenRepositoryPlugin.java b/buildSrc/src/main/java/org/springframework/boot/build/MavenRepositoryPlugin.java index e08af1285cf..258a4ef8dd6 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/MavenRepositoryPlugin.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/MavenRepositoryPlugin.java @@ -58,7 +58,7 @@ public class MavenRepositoryPlugin implements Plugin { 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()); diff --git a/buildSrc/src/main/java/org/springframework/boot/build/antora/GenerateAntoraPlaybook.java b/buildSrc/src/main/java/org/springframework/boot/build/antora/GenerateAntoraPlaybook.java index 42514c24fd6..3df45f7892e 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/antora/GenerateAntoraPlaybook.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/antora/GenerateAntoraPlaybook.java @@ -174,7 +174,8 @@ public abstract class GenerateAntoraPlaybook extends DefaultTask { private void addDir(Map 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())); } diff --git a/buildSrc/src/main/java/org/springframework/boot/build/autoconfigure/AutoConfigurationPlugin.java b/buildSrc/src/main/java/org/springframework/boot/build/autoconfigure/AutoConfigurationPlugin.java index 3bcbd8f8ed2..496115cffda 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/autoconfigure/AutoConfigurationPlugin.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/autoconfigure/AutoConfigurationPlugin.java @@ -93,7 +93,8 @@ public class AutoConfigurationPlugin implements Plugin { .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)); diff --git a/buildSrc/src/main/java/org/springframework/boot/build/bom/BomExtension.java b/buildSrc/src/main/java/org/springframework/boot/build/bom/BomExtension.java index 2b086f4e1cb..f00ddb6228b 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/bom/BomExtension.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/bom/BomExtension.java @@ -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); diff --git a/buildSrc/src/main/java/org/springframework/boot/build/mavenplugin/MavenPluginPlugin.java b/buildSrc/src/main/java/org/springframework/boot/build/mavenplugin/MavenPluginPlugin.java index 689d13e6f21..485f731cc4a 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/mavenplugin/MavenPluginPlugin.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/mavenplugin/MavenPluginPlugin.java @@ -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 { 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 { 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 { 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 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 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 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 { } 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 pluginDescriptorDir = project.getLayout().getBuildDirectory().dir("plugin-descriptor"); + Provider 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 { } private FormatHelpMojoSource createFormatHelpMojoSource(Project project, MavenExec generateHelpMojoTask, - File generatedHelpMojoDir) { + Provider generatedHelpMojoDir) { FormatHelpMojoSource formatHelpMojoSource = project.getTasks() .create("formatHelpMojoSource", FormatHelpMojoSource.class); formatHelpMojoSource.setGenerator(generateHelpMojoTask); @@ -266,9 +270,10 @@ public class MavenPluginPlugin implements Plugin { return formatHelpMojoSource; } - private Sync createSyncPluginDescriptorInputs(Project project, File destination, SourceSet sourceSet) { + private Sync createSyncPluginDescriptorInputs(Project project, Provider 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 { return pluginDescriptorInputs; } - private MavenExec createGeneratePluginDescriptorTask(Project project, File mavenDir) { + private MavenExec createGeneratePluginDescriptorTask(Project project, Provider 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 { TaskProvider 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() diff --git a/buildSrc/src/main/java/org/springframework/boot/build/starters/StarterPlugin.java b/buildSrc/src/main/java/org/springframework/boot/build/starters/StarterPlugin.java index 84afee6efee..115c7221401 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/starters/StarterPlugin.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/starters/StarterPlugin.java @@ -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 { 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 destination = project.getLayout().getBuildDirectory().file("starter-metadata.properties"); starterMetadata.getDestination().set(destination); configurations.create("starterMetadata"); project.getArtifacts() diff --git a/buildSrc/src/test/java/org/springframework/boot/build/architecture/ArchitectureCheckTests.java b/buildSrc/src/test/java/org/springframework/boot/build/architecture/ArchitectureCheckTests.java index 387b592fdec..ff419b347ab 100644 --- a/buildSrc/src/test/java/org/springframework/boot/build/architecture/ArchitectureCheckTests.java +++ b/buildSrc/src/test/java/org/springframework/boot/build/architecture/ArchitectureCheckTests.java @@ -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