Skip to content

Commit 17be4bd

Browse files
committed
Use ResolvedBom as a source for AntoraAsciidocAttributes
Closes gh-44891
1 parent 14bbceb commit 17be4bd

File tree

3 files changed

+57
-222
lines changed

3 files changed

+57
-222
lines changed

buildSrc/src/main/java/org/springframework/boot/build/AntoraConventions.java

+16-17
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@
3535
import org.antora.gradle.AntoraTask;
3636
import org.gradle.StartParameter;
3737
import org.gradle.api.Project;
38+
import org.gradle.api.artifacts.Configuration;
3839
import org.gradle.api.file.Directory;
40+
import org.gradle.api.file.FileCollection;
3941
import org.gradle.api.logging.LogLevel;
4042
import org.gradle.api.plugins.JavaBasePlugin;
4143
import org.gradle.api.provider.Provider;
@@ -46,7 +48,7 @@
4648
import org.springframework.boot.build.antora.AntoraAsciidocAttributes;
4749
import org.springframework.boot.build.antora.GenerateAntoraPlaybook;
4850
import org.springframework.boot.build.bom.BomExtension;
49-
import org.springframework.boot.build.constraints.ExtractVersionConstraints;
51+
import org.springframework.boot.build.bom.ResolvedBom;
5052
import org.springframework.util.Assert;
5153
import org.springframework.util.StringUtils;
5254

@@ -76,7 +78,10 @@ void apply(Project project) {
7678
}
7779

7880
private void apply(Project project, AntoraPlugin antoraPlugin) {
79-
TaskProvider<ExtractVersionConstraints> dependencyVersionsTask = addDependencyVersionsTask(project);
81+
Configuration resolvedBom = project.getConfigurations().create("resolveBom");
82+
project.getDependencies()
83+
.add(resolvedBom.getName(), project.getDependencies()
84+
.project(Map.of("path", DEPENDENCIES_PATH, "configuration", "resolvedBom")));
8085
project.getPlugins().apply(GenerateAntoraYmlPlugin.class);
8186
TaskContainer tasks = project.getTasks();
8287
TaskProvider<GenerateAntoraPlaybook> generateAntoraPlaybookTask = tasks.register(
@@ -86,8 +91,8 @@ private void apply(Project project, AntoraPlugin antoraPlugin) {
8691
(task) -> configureCopyAntoraPackageJsonTask(project, task));
8792
TaskProvider<NpmInstallTask> npmInstallTask = tasks.register("antoraNpmInstall", NpmInstallTask.class,
8893
(task) -> configureNpmInstallTask(project, task, copyAntoraPackageJsonTask));
89-
tasks.withType(GenerateAntoraYmlTask.class, (generateAntoraYmlTask) -> configureGenerateAntoraYmlTask(project,
90-
generateAntoraYmlTask, dependencyVersionsTask));
94+
tasks.withType(GenerateAntoraYmlTask.class,
95+
(generateAntoraYmlTask) -> configureGenerateAntoraYmlTask(project, generateAntoraYmlTask, resolvedBom));
9196
tasks.withType(AntoraTask.class,
9297
(antoraTask) -> configureAntoraTask(project, antoraTask, npmInstallTask, generateAntoraPlaybookTask));
9398
project.getExtensions()
@@ -118,21 +123,15 @@ private void configureNpmInstallTask(Project project, NpmInstallTask npmInstallT
118123
npmInstallTask.getNpmCommand().set(List.of("ci", "--silent", "--no-progress"));
119124
}
120125

121-
private TaskProvider<ExtractVersionConstraints> addDependencyVersionsTask(Project project) {
122-
return project.getTasks()
123-
.register("dependencyVersions", ExtractVersionConstraints.class,
124-
(task) -> task.enforcedPlatform(DEPENDENCIES_PATH));
125-
}
126-
127126
private void configureGenerateAntoraYmlTask(Project project, GenerateAntoraYmlTask generateAntoraYmlTask,
128-
TaskProvider<ExtractVersionConstraints> dependencyVersionsTask) {
127+
Configuration resolvedBom) {
129128
generateAntoraYmlTask.getOutputs().doNotCacheIf("getAsciidocAttributes() changes output", (task) -> true);
130-
generateAntoraYmlTask.dependsOn(dependencyVersionsTask);
129+
generateAntoraYmlTask.dependsOn(resolvedBom);
131130
generateAntoraYmlTask.setProperty("componentName", "boot");
132131
generateAntoraYmlTask.setProperty("outputFile",
133132
project.getLayout().getBuildDirectory().file("generated/docs/antora-yml/antora.yml"));
134133
generateAntoraYmlTask.setProperty("yml", getDefaultYml(project));
135-
generateAntoraYmlTask.getAsciidocAttributes().putAll(getAsciidocAttributes(project, dependencyVersionsTask));
134+
generateAntoraYmlTask.getAsciidocAttributes().putAll(getAsciidocAttributes(project, resolvedBom));
136135
}
137136

138137
private Map<String, ?> getDefaultYml(Project project) {
@@ -151,11 +150,11 @@ private void configureGenerateAntoraYmlTask(Project project, GenerateAntoraYmlTa
151150
return defaultYml;
152151
}
153152

154-
private Provider<Map<String, String>> getAsciidocAttributes(Project project,
155-
TaskProvider<ExtractVersionConstraints> dependencyVersionsTask) {
156-
return dependencyVersionsTask.map((task) -> task.getVersionConstraints()).map((constraints) -> {
153+
private Provider<Map<String, String>> getAsciidocAttributes(Project project, FileCollection resolvedBoms) {
154+
return project.provider(() -> {
157155
BomExtension bom = (BomExtension) project.project(DEPENDENCIES_PATH).getExtensions().getByName("bom");
158-
return new AntoraAsciidocAttributes(project, bom, constraints).get();
156+
ResolvedBom resolvedBom = ResolvedBom.readFrom(resolvedBoms.getSingleFile());
157+
return new AntoraAsciidocAttributes(project, bom, resolvedBom).get();
159158
});
160159
}
161160

buildSrc/src/main/java/org/springframework/boot/build/antora/AntoraAsciidocAttributes.java

+41-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2024 the original author or authors.
2+
* Copyright 2012-2025 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -20,7 +20,9 @@
2020
import java.io.InputStream;
2121
import java.io.UncheckedIOException;
2222
import java.util.Arrays;
23+
import java.util.Collection;
2324
import java.util.Collections;
25+
import java.util.HashMap;
2426
import java.util.LinkedHashMap;
2527
import java.util.List;
2628
import java.util.Map;
@@ -32,6 +34,10 @@
3234
import org.springframework.boot.build.artifacts.ArtifactRelease;
3335
import org.springframework.boot.build.bom.BomExtension;
3436
import org.springframework.boot.build.bom.Library;
37+
import org.springframework.boot.build.bom.ResolvedBom;
38+
import org.springframework.boot.build.bom.ResolvedBom.Bom;
39+
import org.springframework.boot.build.bom.ResolvedBom.Id;
40+
import org.springframework.boot.build.bom.ResolvedBom.ResolvedLibrary;
3541
import org.springframework.boot.build.properties.BuildProperties;
3642
import org.springframework.boot.build.properties.BuildType;
3743
import org.springframework.util.Assert;
@@ -59,17 +65,48 @@ public class AntoraAsciidocAttributes {
5965

6066
private final Map<String, ?> projectProperties;
6167

62-
public AntoraAsciidocAttributes(Project project, BomExtension dependencyBom,
63-
Map<String, String> dependencyVersions) {
68+
public AntoraAsciidocAttributes(Project project, BomExtension dependencyBom, ResolvedBom resolvedBom) {
6469
this.version = String.valueOf(project.getVersion());
6570
this.latestVersion = Boolean.parseBoolean(String.valueOf(project.findProperty("latestVersion")));
6671
this.buildType = BuildProperties.get(project).buildType();
6772
this.artifactRelease = ArtifactRelease.forProject(project);
6873
this.libraries = dependencyBom.getLibraries();
69-
this.dependencyVersions = dependencyVersions;
74+
this.dependencyVersions = dependencyVersionsOf(resolvedBom);
7075
this.projectProperties = project.getProperties();
7176
}
7277

78+
private static Map<String, String> dependencyVersionsOf(ResolvedBom resolvedBom) {
79+
Map<String, String> dependencyVersions = new HashMap<>();
80+
for (ResolvedLibrary library : resolvedBom.libraries()) {
81+
dependencyVersions.putAll(dependencyVersionsOf(library.managedDependencies()));
82+
for (Bom importedBom : library.importedBoms()) {
83+
dependencyVersions.putAll(dependencyVersionsOf(importedBom));
84+
}
85+
}
86+
return dependencyVersions;
87+
}
88+
89+
private static Map<String, String> dependencyVersionsOf(Bom bom) {
90+
Map<String, String> dependencyVersions = new HashMap<>();
91+
if (bom != null) {
92+
dependencyVersions.putAll(dependencyVersionsOf(bom.managedDependencies()));
93+
dependencyVersions.putAll(dependencyVersionsOf(bom.parent()));
94+
for (Bom importedBom : bom.importedBoms()) {
95+
dependencyVersions.putAll(dependencyVersionsOf(importedBom));
96+
}
97+
}
98+
return dependencyVersions;
99+
}
100+
101+
private static Map<String, String> dependencyVersionsOf(Collection<Id> managedDependencies) {
102+
Map<String, String> dependencyVersions = new HashMap<>();
103+
for (Id managedDependency : managedDependencies) {
104+
dependencyVersions.put(managedDependency.groupId() + ":" + managedDependency.artifactId(),
105+
managedDependency.version());
106+
}
107+
return dependencyVersions;
108+
}
109+
73110
AntoraAsciidocAttributes(String version, boolean latestVersion, BuildType buildType, List<Library> libraries,
74111
Map<String, String> dependencyVersions, Map<String, ?> projectProperties) {
75112
this.version = version;

buildSrc/src/main/java/org/springframework/boot/build/constraints/ExtractVersionConstraints.java

-201
This file was deleted.

0 commit comments

Comments
 (0)