Skip to content

Commit a5a7788

Browse files
committed
Merge branch '3.4.x'
Closes gh-44882
2 parents 13bff93 + 42f5f63 commit a5a7788

File tree

5 files changed

+102
-24
lines changed

5 files changed

+102
-24
lines changed

buildSrc/src/main/java/org/springframework/boot/build/bom/BomResolver.java

+14-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@
1717
package org.springframework.boot.build.bom;
1818

1919
import java.io.File;
20+
import java.net.URI;
2021
import java.util.ArrayList;
22+
import java.util.Collections;
2123
import java.util.HashMap;
2224
import java.util.List;
2325
import java.util.Map;
@@ -40,9 +42,12 @@
4042
import org.w3c.dom.NodeList;
4143

4244
import org.springframework.boot.build.bom.Library.Group;
45+
import org.springframework.boot.build.bom.Library.Link;
4346
import org.springframework.boot.build.bom.Library.Module;
4447
import org.springframework.boot.build.bom.ResolvedBom.Bom;
4548
import org.springframework.boot.build.bom.ResolvedBom.Id;
49+
import org.springframework.boot.build.bom.ResolvedBom.JavadocLink;
50+
import org.springframework.boot.build.bom.ResolvedBom.Links;
4651
import org.springframework.boot.build.bom.ResolvedBom.ResolvedLibrary;
4752

4853
/**
@@ -85,15 +90,23 @@ ResolvedBom resolve(BomExtension bomExtension) {
8590
imports.add(bom);
8691
}
8792
}
93+
List<JavadocLink> javadocLinks = javadocLinksOf(library).stream()
94+
.map((link) -> new JavadocLink(URI.create(link.url(library)), link.packages()))
95+
.toList();
8896
ResolvedLibrary resolvedLibrary = new ResolvedLibrary(library.getName(),
8997
library.getVersion().getVersion().toString(), library.getVersionProperty(), managedDependencies,
90-
imports);
98+
imports, new Links(javadocLinks));
9199
libraries.add(resolvedLibrary);
92100
}
93101
String[] idComponents = bomExtension.getId().split(":");
94102
return new ResolvedBom(new Id(idComponents[0], idComponents[1], idComponents[2]), libraries);
95103
}
96104

105+
private List<Link> javadocLinksOf(Library library) {
106+
List<Link> javadocLinks = library.getLinks("javadoc");
107+
return (javadocLinks != null) ? javadocLinks : Collections.emptyList();
108+
}
109+
97110
Bom resolveMavenBom(String coordinates) {
98111
return bomFrom(resolveBom(coordinates));
99112
}

buildSrc/src/main/java/org/springframework/boot/build/bom/CreateResolvedBom.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,10 @@ public CreateResolvedBom(BomExtension bomExtension) {
4949
public abstract RegularFileProperty getOutputFile();
5050

5151
@TaskAction
52-
void describeDependencyManagement() throws IOException {
53-
ResolvedBom dependencyManagement = this.bomResolver.resolve(this.bomExtension);
52+
void createResolvedBom() throws IOException {
53+
ResolvedBom resolvedBom = this.bomResolver.resolve(this.bomExtension);
5454
try (FileWriter writer = new FileWriter(getOutputFile().get().getAsFile())) {
55-
dependencyManagement.writeTo(writer);
55+
resolvedBom.writeTo(writer);
5656
}
5757
}
5858

buildSrc/src/main/java/org/springframework/boot/build/bom/ResolvedBom.java

+10-1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.io.IOException;
2222
import java.io.UncheckedIOException;
2323
import java.io.Writer;
24+
import java.net.URI;
2425
import java.util.List;
2526

2627
import com.fasterxml.jackson.annotation.JsonInclude.Include;
@@ -66,7 +67,7 @@ public void writeTo(Writer writer) {
6667
}
6768

6869
public record ResolvedLibrary(String name, String version, String versionProperty, List<Id> managedDependencies,
69-
List<Bom> importedBoms) {
70+
List<Bom> importedBoms, Links links) {
7071

7172
}
7273

@@ -109,4 +110,12 @@ public record Bom(Id id, Bom parent, List<Id> managedDependencies, List<Bom> imp
109110

110111
}
111112

113+
public record Links(List<JavadocLink> javadoc) {
114+
115+
}
116+
117+
public record JavadocLink(URI uri, List<String> packages) {
118+
119+
}
120+
112121
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
/*
2+
* Copyright 2012-2025 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.springframework.boot.build.docs;
18+
19+
import java.net.URI;
20+
import java.util.ArrayList;
21+
import java.util.Collection;
22+
import java.util.List;
23+
24+
import org.gradle.api.Action;
25+
import org.gradle.api.file.FileCollection;
26+
import org.gradle.api.tasks.javadoc.Javadoc;
27+
import org.gradle.external.javadoc.StandardJavadocDocletOptions;
28+
29+
import org.springframework.boot.build.bom.ResolvedBom;
30+
import org.springframework.boot.build.bom.ResolvedBom.JavadocLink;
31+
32+
/**
33+
* An {@link Action} to configure the links option of a {@link Javadoc} task.
34+
*
35+
* @author Andy Wilkinson
36+
*/
37+
public class ConfigureJavadocLinks implements Action<Javadoc> {
38+
39+
private final FileCollection resolvedBoms;
40+
41+
private final Collection<String> includedLibraries;
42+
43+
public ConfigureJavadocLinks(FileCollection resolvedBoms, Collection<String> includedLibraries) {
44+
this.resolvedBoms = resolvedBoms;
45+
this.includedLibraries = includedLibraries;
46+
}
47+
48+
@Override
49+
public void execute(Javadoc javadoc) {
50+
javadoc.options((options) -> {
51+
if (options instanceof StandardJavadocDocletOptions standardOptions) {
52+
configureLinks(standardOptions);
53+
}
54+
});
55+
}
56+
57+
private void configureLinks(StandardJavadocDocletOptions options) {
58+
ResolvedBom resolvedBom = ResolvedBom.readFrom(this.resolvedBoms.getSingleFile());
59+
List<String> links = new ArrayList<>();
60+
links.add("https://docs.oracle.com/en/java/javase/17/docs/api/");
61+
links.add("https://jakarta.ee/specifications/platform/9/apidocs/");
62+
resolvedBom.libraries()
63+
.stream()
64+
.filter((candidate) -> this.includedLibraries.contains(candidate.name()))
65+
.flatMap((library) -> library.links().javadoc().stream())
66+
.map(JavadocLink::uri)
67+
.map(URI::toString)
68+
.forEach(links::add);
69+
options.setLinks(links);
70+
}
71+
72+
}

spring-boot-project/spring-boot-docs/build.gradle

+3-19
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import org.springframework.boot.build.docs.ConfigureJavadocLinks
2+
13
plugins {
24
id "dev.adamko.dokkatoo-html"
35
id "java"
@@ -203,7 +205,6 @@ dokkatoo {
203205
}
204206

205207
task aggregatedJavadoc(type: Javadoc) {
206-
dependsOn dependencyVersions
207208
project.rootProject.gradle.projectsEvaluated {
208209
Set<Project> publishedProjects = rootProject.subprojects.findAll { it != project }
209210
.findAll { it.plugins.hasPlugin(JavaPlugin) && it.plugins.hasPlugin(MavenPublishPlugin) }
@@ -225,24 +226,7 @@ task aggregatedJavadoc(type: Javadoc) {
225226
use = true
226227
windowTitle = "Spring Boot ${project.version} API"
227228
}
228-
doFirst {
229-
def versionConstraints = dependencyVersions.versionConstraints
230-
def toMajorMinorVersion = version -> {
231-
String formatted = version.split("\\.").take(2).join('.') + '.x'
232-
return version.endsWith("-SNAPSHOT") ? formatted + "-SNAPSHOT" : formatted
233-
}
234-
def springFrameworkVersion = toMajorMinorVersion(versionConstraints["org.springframework:spring-core"])
235-
def springSecurityVersion = toMajorMinorVersion(versionConstraints["org.springframework.security:spring-security-core"])
236-
def tomcatVersion = "${versionConstraints["org.apache.tomcat:tomcat-annotations-api"]}"
237-
def tomcatDocsVersion = tomcatVersion.substring(0, tomcatVersion.lastIndexOf("."));
238-
options.links = [
239-
"https://docs.oracle.com/en/java/javase/17/docs/api/",
240-
"https://docs.spring.io/spring-framework/docs/${springFrameworkVersion}/javadoc-api/",
241-
"https://docs.spring.io/spring-security/site/docs/${springSecurityVersion}/api/",
242-
"https://jakarta.ee/specifications/platform/9/apidocs/",
243-
"https://tomcat.apache.org/tomcat-${tomcatDocsVersion}-doc/api/",
244-
] as String[]
245-
}
229+
doFirst(new ConfigureJavadocLinks(configurations.resolvedBom, ["Spring Framework", "Spring Security", "Tomcat"]))
246230
}
247231
}
248232

0 commit comments

Comments
 (0)