From 436f2758f852098b7f02d85e1075ee85d9a102f4 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Fri, 10 May 2024 09:57:12 +0100 Subject: [PATCH] Ensure that extensions have been built before Asciidoctor runs See gh-40536 --- .../boot/build/AsciidoctorConventions.java | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/buildSrc/src/main/java/org/springframework/boot/build/AsciidoctorConventions.java b/buildSrc/src/main/java/org/springframework/boot/build/AsciidoctorConventions.java index 601812e0e48..741215b7b92 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/AsciidoctorConventions.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/AsciidoctorConventions.java @@ -26,6 +26,7 @@ import org.asciidoctor.gradle.jvm.AsciidoctorJExtension; import org.asciidoctor.gradle.jvm.AsciidoctorJPlugin; import org.asciidoctor.gradle.jvm.AsciidoctorTask; import org.gradle.api.Project; +import org.gradle.api.artifacts.Configuration; import org.gradle.api.tasks.PathSensitivity; import org.gradle.api.tasks.Sync; @@ -54,6 +55,9 @@ import org.springframework.util.StringUtils; *
  • {@link AbstractAsciidoctorTask#baseDirFollowsSourceDir() baseDirFollowsSourceDir()} * is enabled. *
  • {@code asciidoctorExtensions} is added to the task's configurations. + *
  • The task is configured to depend on the {@code asciidoctorExtensions} configuraion + * to ensure that any extensions are built before the task runs. This works around + * https://github.com/asciidoctor/asciidoctor-gradle-plugin/issues/721. * * * @@ -64,16 +68,14 @@ class AsciidoctorConventions { private static final String ASCIIDOCTORJ_VERSION = "2.4.3"; - private static final String EXTENSIONS_CONFIGURATION_NAME = "asciidoctorExtensions"; - void apply(Project project) { project.getPlugins().withType(AsciidoctorJPlugin.class, (asciidoctorPlugin) -> { makeAllWarningsFatal(project); upgradeAsciidoctorJVersion(project); - createAsciidoctorExtensionsConfiguration(project); + Configuration asciidoctorExtensions = createAsciidoctorExtensionsConfiguration(project); project.getTasks() .withType(AbstractAsciidoctorTask.class, - (asciidoctorTask) -> configureAsciidoctorTask(project, asciidoctorTask)); + (asciidoctorTask) -> configureAsciidoctorTask(project, asciidoctorTask, asciidoctorExtensions)); }); } @@ -85,8 +87,8 @@ class AsciidoctorConventions { project.getExtensions().getByType(AsciidoctorJExtension.class).setVersion(ASCIIDOCTORJ_VERSION); } - private void createAsciidoctorExtensionsConfiguration(Project project) { - project.getConfigurations().create(EXTENSIONS_CONFIGURATION_NAME, (configuration) -> { + private Configuration createAsciidoctorExtensionsConfiguration(Project project) { + return project.getConfigurations().create("asciidoctorExtensions", (configuration) -> { project.getConfigurations() .matching((candidate) -> "dependencyManagement".equals(candidate.getName())) .all(configuration::extendsFrom); @@ -98,8 +100,10 @@ class AsciidoctorConventions { }); } - private void configureAsciidoctorTask(Project project, AbstractAsciidoctorTask asciidoctorTask) { - asciidoctorTask.configurations(EXTENSIONS_CONFIGURATION_NAME); + private void configureAsciidoctorTask(Project project, AbstractAsciidoctorTask asciidoctorTask, + Configuration asciidoctorExtensions) { + asciidoctorTask.configurations(asciidoctorExtensions); + asciidoctorTask.dependsOn(asciidoctorExtensions); configureCommonAttributes(project, asciidoctorTask); configureOptions(asciidoctorTask); configureForkOptions(asciidoctorTask);