Merge branch '3.2.x' into 3.3.x

Closes gh-42269
This commit is contained in:
Stéphane Nicoll 2024-09-11 18:56:35 +02:00
commit 726ee27cce
7 changed files with 133 additions and 61 deletions

View File

@ -19,11 +19,13 @@ package org.springframework.boot.build.antora;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.UncheckedIOException; import java.io.UncheckedIOException;
import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Properties; import java.util.Properties;
import java.util.stream.Collectors;
import org.gradle.api.Project; import org.gradle.api.Project;
@ -130,13 +132,21 @@ public class AntoraAsciidocAttributes {
} }
private void addSpringDataDependencyVersion(Map<String, String> attributes, String name, String artifactId) { private void addSpringDataDependencyVersion(Map<String, String> attributes, String name, String artifactId) {
addDependencyVersion(attributes, name, "org.springframework.data:" + artifactId); String version = getVersion("org.springframework.data:" + artifactId);
String majorMinor = Arrays.stream(version.split("\\.")).limit(2).collect(Collectors.joining("."));
String antoraVersion = version.endsWith(DASH_SNAPSHOT) ? majorMinor + DASH_SNAPSHOT : majorMinor;
attributes.put("version-" + name + "-docs", antoraVersion);
attributes.put("version-" + name + "-javadoc", majorMinor + ".x");
} }
private void addDependencyVersion(Map<String, String> attributes, String name, String groupAndArtifactId) { private void addDependencyVersion(Map<String, String> attributes, String name, String groupAndArtifactId) {
attributes.put("version-" + name, getVersion(groupAndArtifactId));
}
private String getVersion(String groupAndArtifactId) {
String version = this.dependencyVersions.get(groupAndArtifactId); String version = this.dependencyVersions.get(groupAndArtifactId);
Assert.notNull(version, () -> "No version found for " + groupAndArtifactId); Assert.notNull(version, () -> "No version found for " + groupAndArtifactId);
attributes.put("version-" + name, version); return version;
} }
private void addArtifactAttributes(Map<String, String> attributes) { private void addArtifactAttributes(Map<String, String> attributes) {

View File

@ -253,6 +253,15 @@ public class Library {
return result; return result;
} }
public String forMajorMinorGeneration() {
String[] parts = parts();
String result = parts[0] + "." + parts[1] + ".x";
if (toString().endsWith("SNAPSHOT")) {
result += "-SNAPSHOT";
}
return result;
}
private String[] parts() { private String[] parts() {
return toString().split("[.-]"); return toString().split("[.-]");
} }

View File

@ -33,33 +33,33 @@ url-paketo-docs=https://paketo.io/docs
url-paketo-docs-java-buildpack={url-paketo-docs}/buildpacks/language-family-buildpacks/java url-paketo-docs-java-buildpack={url-paketo-docs}/buildpacks/language-family-buildpacks/java
url-spring-boot-for-apache-geode-docs=https://docs.spring.io/spring-boot-data-geode-build/2.0.x/reference/html5 url-spring-boot-for-apache-geode-docs=https://docs.spring.io/spring-boot-data-geode-build/2.0.x/reference/html5
url-spring-boot-for-apache-geode-site=https://github.com/spring-projects/spring-boot-data-geode url-spring-boot-for-apache-geode-site=https://github.com/spring-projects/spring-boot-data-geode
url-spring-data-cassandra-javadoc=https://docs.spring.io/spring-data/cassandra/docs/{version-spring-data-cassandra}/api url-spring-data-cassandra-javadoc=https://docs.spring.io/spring-data/cassandra/docs/{version-spring-data-cassandra-javadoc}/api
url-spring-data-cassandra-site=https://spring.io/projects/spring-data-cassandra url-spring-data-cassandra-site=https://spring.io/projects/spring-data-cassandra
url-spring-data-commons-javadoc=https://docs.spring.io/spring-data/commons/docs/{version-spring-data-commons}/api url-spring-data-commons-javadoc=https://docs.spring.io/spring-data/commons/docs/{version-spring-data-commons-javadoc}/api
url-spring-data-couchbase-docs=https://docs.spring.io/spring-data/couchbase/reference/{version-spring-data-couchbase} url-spring-data-couchbase-docs=https://docs.spring.io/spring-data/couchbase/reference/{version-spring-data-couchbase-docs}
url-spring-data-couchbase-site=https://spring.io/projects/spring-data-couchbase url-spring-data-couchbase-site=https://spring.io/projects/spring-data-couchbase
url-spring-data-couchbase-javadoc=https://docs.spring.io/spring-data/couchbase/docs/{version-spring-data-couchbase}/api url-spring-data-couchbase-javadoc=https://docs.spring.io/spring-data/couchbase/docs/{version-spring-data-couchbase-javadoc}/api
url-spring-data-elasticsearch-javadoc=https://docs.spring.io/spring-data/elasticsearch/docs/{version-spring-data-elasticsearch}/api url-spring-data-elasticsearch-javadoc=https://docs.spring.io/spring-data/elasticsearch/docs/{version-spring-data-elasticsearch-javadoc}/api
url-spring-data-elasticsearch-docs=https://docs.spring.io/spring-data/elasticsearch/reference/{version-spring-data-elasticsearch} url-spring-data-elasticsearch-docs=https://docs.spring.io/spring-data/elasticsearch/reference/{version-spring-data-elasticsearch-docs}
url-spring-data-elasticsearch-site=https://spring.io/projects/spring-data-elasticsearch url-spring-data-elasticsearch-site=https://spring.io/projects/spring-data-elasticsearch
url-spring-data-envers-site=https://spring.io/projects/spring-data-envers url-spring-data-envers-site=https://spring.io/projects/spring-data-envers
url-spring-data-gemfire-site=https://spring.io/projects/spring-data-gemfire url-spring-data-gemfire-site=https://spring.io/projects/spring-data-gemfire
url-spring-data-geode-site=https://spring.io/projects/spring-data-geode url-spring-data-geode-site=https://spring.io/projects/spring-data-geode
url-spring-data-jdbc-docs=https://docs.spring.io/spring-data/relational/reference/{version-spring-data-jdbc} url-spring-data-jdbc-docs=https://docs.spring.io/spring-data/relational/reference/{version-spring-data-jdbc-docs}
url-spring-data-jpa-javadoc=https://docs.spring.io/spring-data/jpa/docs/{version-spring-data-jpa}/api url-spring-data-jpa-javadoc=https://docs.spring.io/spring-data/jpa/docs/{version-spring-data-jpa-javadoc}/api
url-spring-data-jpa-site=https://spring.io/projects/spring-jpa url-spring-data-jpa-site=https://spring.io/projects/spring-jpa
url-spring-data-jpa-docs=https://docs.spring.io/spring-data/jpa/reference/{version-spring-data-jpa} url-spring-data-jpa-docs=https://docs.spring.io/spring-data/jpa/reference/{version-spring-data-jpa-docs}
url-spring-data-ldap-site=https://spring.io/projects/spring-data-ldap url-spring-data-ldap-site=https://spring.io/projects/spring-data-ldap
url-spring-data-mongodb-javadoc=https://docs.spring.io/spring-data/mongodb/docs/{version-spring-data-mongodb}/api url-spring-data-mongodb-javadoc=https://docs.spring.io/spring-data/mongodb/docs/{version-spring-data-mongodb-javadoc}/api
url-spring-data-mongodb-site=https://spring.io/projects/spring-data-mongodb url-spring-data-mongodb-site=https://spring.io/projects/spring-data-mongodb
url-spring-data-mongodb-docs=https://docs.spring.io/spring-data/mongodb/reference/{version-spring-data-mongodb} url-spring-data-mongodb-docs=https://docs.spring.io/spring-data/mongodb/reference/{version-spring-data-mongodb-docs}
url-spring-data-neo4j-javadoc=https://docs.spring.io/spring-data/neo4j/docs/{version-spring-data-neo4j}/api url-spring-data-neo4j-javadoc=https://docs.spring.io/spring-data/neo4j/docs/{version-spring-data-neo4j-javadoc}/api
url-spring-data-neo4j-docs=https://docs.spring.io/spring-data/neo4j/reference/{version-spring-data-neo4j} url-spring-data-neo4j-docs=https://docs.spring.io/spring-data/neo4j/reference/{version-spring-data-neo4j-docs}
url-spring-data-neo4j-site=https://spring.io/projects/spring-data-neo4j url-spring-data-neo4j-site=https://spring.io/projects/spring-data-neo4j
url-spring-data-r2dbc-javadoc=https://docs.spring.io/spring-data/r2dbc/docs/{version-spring-data-r2dbc}/api url-spring-data-r2dbc-javadoc=https://docs.spring.io/spring-data/r2dbc/docs/{version-spring-data-r2dbc-javadoc}/api
url-spring-data-r2dbc-docs=https://docs.spring.io/spring-data/relational/reference/{version-spring-data-r2dbc} url-spring-data-r2dbc-docs=https://docs.spring.io/spring-data/relational/reference/{version-spring-data-r2dbc-docs}
url-spring-data-redis-site=https://spring.io/projects/spring-data-redis url-spring-data-redis-site=https://spring.io/projects/spring-data-redis
url-spring-data-rest-javadoc=https://docs.spring.io/spring-data/rest/docs/{version-spring-data-rest}/api url-spring-data-rest-javadoc=https://docs.spring.io/spring-data/rest/docs/{version-spring-data-rest-javadoc}/api
url-spring-data-site=https://spring.io/projects/spring-data url-spring-data-site=https://spring.io/projects/spring-data
url-jackson-annotations=https://javadoc.io/doc/com.fasterxml.jackson.core/jackson-annotations/{version-jackson-annotations} url-jackson-annotations=https://javadoc.io/doc/com.fasterxml.jackson.core/jackson-annotations/{version-jackson-annotations}
url-jackson-core=https://javadoc.io/doc/com.fasterxml.jackson.core/jackson-core/{version-jackson-core} url-jackson-core=https://javadoc.io/doc/com.fasterxml.jackson.core/jackson-core/{version-jackson-core}

View File

@ -38,6 +38,7 @@ import static org.assertj.core.api.Assertions.assertThat;
* Tests for {@link AntoraAsciidocAttributes}. * Tests for {@link AntoraAsciidocAttributes}.
* *
* @author Phillip Webb * @author Phillip Webb
* @author Stephane Nicoll
*/ */
class AntoraAsciidocAttributesTests { class AntoraAsciidocAttributesTests {
@ -78,10 +79,19 @@ class AntoraAsciidocAttributesTests {
} }
@Test @Test
void versionReferenceFromSpringDataDependencyVersion() { void versionReferenceFromSpringDataDependencyReleaseVersion() {
AntoraAsciidocAttributes attributes = new AntoraAsciidocAttributes("1.2.3", true, null, AntoraAsciidocAttributes attributes = new AntoraAsciidocAttributes("1.2.3", true, null,
mockDependencyVersions(), null); mockDependencyVersions("3.2.5"), null);
assertThat(attributes.get()).containsEntry("version-spring-data-mongodb", "1.2.3"); assertThat(attributes.get()).containsEntry("version-spring-data-mongodb-docs", "3.2");
assertThat(attributes.get()).containsEntry("version-spring-data-mongodb-javadoc", "3.2.x");
}
@Test
void versionReferenceFromSpringDataDependencySnapshotVersion() {
AntoraAsciidocAttributes attributes = new AntoraAsciidocAttributes("1.2.3", true, null,
mockDependencyVersions("3.2.0-SNAPSHOT"), null);
assertThat(attributes.get()).containsEntry("version-spring-data-mongodb-docs", "3.2-SNAPSHOT");
assertThat(attributes.get()).containsEntry("version-spring-data-mongodb-javadoc", "3.2.x");
} }
@Test @Test
@ -173,29 +183,33 @@ class AntoraAsciidocAttributesTests {
} }
private Map<String, String> mockDependencyVersions() { private Map<String, String> mockDependencyVersions() {
return mockDependencyVersions("1.2.3");
}
private Map<String, String> mockDependencyVersions(String version) {
Map<String, String> versions = new LinkedHashMap<>(); Map<String, String> versions = new LinkedHashMap<>();
addMockSpringDataVersion(versions, "spring-data-commons"); addMockSpringDataVersion(versions, "spring-data-commons", version);
addMockSpringDataVersion(versions, "spring-data-cassandra"); addMockSpringDataVersion(versions, "spring-data-cassandra", version);
addMockSpringDataVersion(versions, "spring-data-couchbase"); addMockSpringDataVersion(versions, "spring-data-couchbase", version);
addMockSpringDataVersion(versions, "spring-data-elasticsearch"); addMockSpringDataVersion(versions, "spring-data-elasticsearch", version);
addMockSpringDataVersion(versions, "spring-data-jdbc"); addMockSpringDataVersion(versions, "spring-data-jdbc", version);
addMockSpringDataVersion(versions, "spring-data-jpa"); addMockSpringDataVersion(versions, "spring-data-jpa", version);
addMockSpringDataVersion(versions, "spring-data-mongodb"); addMockSpringDataVersion(versions, "spring-data-mongodb", version);
addMockSpringDataVersion(versions, "spring-data-neo4j"); addMockSpringDataVersion(versions, "spring-data-neo4j", version);
addMockSpringDataVersion(versions, "spring-data-r2dbc"); addMockSpringDataVersion(versions, "spring-data-r2dbc", version);
addMockSpringDataVersion(versions, "spring-data-rest-core"); addMockSpringDataVersion(versions, "spring-data-rest-core", version);
addMockJacksonVersion(versions, "jackson-annotations"); addMockJacksonVersion(versions, "jackson-annotations", version);
addMockJacksonVersion(versions, "jackson-core"); addMockJacksonVersion(versions, "jackson-core", version);
addMockJacksonVersion(versions, "jackson-databind"); addMockJacksonVersion(versions, "jackson-databind", version);
return versions; return versions;
} }
private void addMockSpringDataVersion(Map<String, String> versions, String artifactId) { private void addMockSpringDataVersion(Map<String, String> versions, String artifactId, String version) {
versions.put("org.springframework.data:" + artifactId, "1.2.3"); versions.put("org.springframework.data:" + artifactId, version);
} }
private void addMockJacksonVersion(Map<String, String> versions, String artifactId) { private void addMockJacksonVersion(Map<String, String> versions, String artifactId, String version) {
versions.put("com.fasterxml.jackson.core:" + artifactId, "2.3.4"); versions.put("com.fasterxml.jackson.core:" + artifactId, version);
} }
} }

View File

@ -72,4 +72,16 @@ class LibraryTests {
assertThat(library.getLinkRootName()).isEqualTo("spring-data"); assertThat(library.getLinkRootName()).isEqualTo("spring-data");
} }
@Test
void toMajorMinorGenerationWithRelease() {
LibraryVersion version = new LibraryVersion(DependencyVersion.parse("1.2.3"));
assertThat(version.forMajorMinorGeneration()).isEqualTo("1.2.x");
}
@Test
void toMajorMinorGenerationWithSnapshot() {
LibraryVersion version = new LibraryVersion(DependencyVersion.parse("2.0.0-SNAPSHOT"));
assertThat(version.forMajorMinorGeneration()).isEqualTo("2.0.x-SNAPSHOT");
}
} }

View File

@ -1911,8 +1911,10 @@ bom {
links { links {
site("https://spring.io/projects/spring-amqp") site("https://spring.io/projects/spring-amqp")
github("https://github.com/spring-projects/spring-amqp") github("https://github.com/spring-projects/spring-amqp")
javadoc("https://docs.spring.io/spring-amqp/docs/{version}/api") javadoc { version -> "https://docs.spring.io/spring-amqp/docs/%s/api"
docs("https://docs.spring.io/spring-amqp/reference/{version}") .formatted(version.forMajorMinorGeneration()) }
docs { version -> "https://docs.spring.io/spring-amqp/reference/%s"
.formatted(version.forAntora()) }
releaseNotes("https://github.com/spring-projects/spring-amqp/releases/tag/v{version}") releaseNotes("https://github.com/spring-projects/spring-amqp/releases/tag/v{version}")
} }
} }
@ -1926,7 +1928,8 @@ bom {
links { links {
site("https://spring.io/projects/spring-authorization-server") site("https://spring.io/projects/spring-authorization-server")
github("https://github.com/spring-projects/spring-authorization-server") github("https://github.com/spring-projects/spring-authorization-server")
javadoc("https://docs.spring.io/spring-authorization-server/docs/{version}/api") javadoc {version -> "https://docs.spring.io/spring-authorization-server/docs/%s/api"
.formatted(version.forMajorMinorGeneration()) }
docs { version -> "https://docs.spring.io/spring-authorization-server/reference/%s" docs { version -> "https://docs.spring.io/spring-authorization-server/reference/%s"
.formatted(version.forAntora()) } .formatted(version.forAntora()) }
releaseNotes("https://github.com/spring-projects/spring-authorization-server/releases/tag/{version}") releaseNotes("https://github.com/spring-projects/spring-authorization-server/releases/tag/{version}")
@ -1942,7 +1945,8 @@ bom {
links { links {
site("https://spring.io/projects/spring-batch") site("https://spring.io/projects/spring-batch")
github("https://github.com/spring-projects/spring-batch") github("https://github.com/spring-projects/spring-batch")
javadoc("https://docs.spring.io/spring-batch/docs/{version}/api") javadoc { version -> "https://docs.spring.io/spring-batch/docs/%s/api"
.formatted(version.forMajorMinorGeneration()) }
docs { version -> "https://docs.spring.io/spring-batch/reference/%s" docs { version -> "https://docs.spring.io/spring-batch/reference/%s"
.formatted(version.forAntora()) } .formatted(version.forAntora()) }
releaseNotes("https://github.com/spring-projects/spring-batch/releases/tag/v{version}") releaseNotes("https://github.com/spring-projects/spring-batch/releases/tag/v{version}")
@ -1972,8 +1976,10 @@ bom {
links { links {
site("https://spring.io/projects/spring-framework") site("https://spring.io/projects/spring-framework")
github("https://github.com/spring-projects/spring-framework") github("https://github.com/spring-projects/spring-framework")
javadoc("https://docs.spring.io/spring-framework/docs/{version}/javadoc-api") javadoc { version ->"https://docs.spring.io/spring-framework/docs/%s/javadoc-api"
docs("https://docs.spring.io/spring-framework/reference/{version}") .formatted(version.forMajorMinorGeneration()) }
docs { version -> "https://docs.spring.io/spring-framework/reference/%s"
.formatted(version.forAntora()) }
releaseNotes("https://github.com/spring-projects/spring-framework/releases/tag/v{version}") releaseNotes("https://github.com/spring-projects/spring-framework/releases/tag/v{version}")
} }
} }
@ -1988,7 +1994,8 @@ bom {
links { links {
site("https://spring.io/projects/spring-graphql") site("https://spring.io/projects/spring-graphql")
github("https://github.com/spring-projects/spring-graphql") github("https://github.com/spring-projects/spring-graphql")
javadoc("https://docs.spring.io/spring-graphql/docs/{version}/api") javadoc { version -> "https://docs.spring.io/spring-graphql/docs/%s/api"
.formatted(version.forMajorMinorGeneration()) }
docs { version -> "https://docs.spring.io/spring-graphql/reference/%s" docs { version -> "https://docs.spring.io/spring-graphql/reference/%s"
.formatted(version.forAntora()) } .formatted(version.forAntora()) }
releaseNotes("https://github.com/spring-projects/spring-graphql/releases/tag/v{version}") releaseNotes("https://github.com/spring-projects/spring-graphql/releases/tag/v{version}")
@ -2004,8 +2011,10 @@ bom {
links { links {
site("https://spring.io/projects/spring-hateoas") site("https://spring.io/projects/spring-hateoas")
github("https://github.com/spring-projects/spring-hateoas") github("https://github.com/spring-projects/spring-hateoas")
javadoc("https://docs.spring.io/spring-hateoas/docs/{version}/api") javadoc { version -> "https://docs.spring.io/spring-hateoas/docs/%s/api"
docs("https://docs.spring.io/spring-hateoas/docs/{version}/reference/html") .formatted(version.forMajorMinorGeneration()) }
docs { version -> "https://docs.spring.io/spring-hateoas/docs/%s/reference/html"
.formatted(version.forMajorMinorGeneration()) }
releaseNotes("https://github.com/spring-projects/spring-hateoas/releases/tag/{version}") releaseNotes("https://github.com/spring-projects/spring-hateoas/releases/tag/{version}")
} }
} }
@ -2019,7 +2028,8 @@ bom {
links { links {
site("https://spring.io/projects/spring-integration") site("https://spring.io/projects/spring-integration")
github("https://github.com/spring-projects/spring-integration") github("https://github.com/spring-projects/spring-integration")
javadoc("https://docs.spring.io/spring-integration/docs/{version}/api") javadoc { version -> "https://docs.spring.io/spring-integration/docs/%s/api"
.formatted(version.forMajorMinorGeneration()) }
docs { version -> "https://docs.spring.io/spring-integration/reference/%s" docs { version -> "https://docs.spring.io/spring-integration/reference/%s"
.formatted(version.forAntora()) } .formatted(version.forAntora()) }
releaseNotes("https://github.com/spring-projects/spring-integration/releases/tag/v{version}") releaseNotes("https://github.com/spring-projects/spring-integration/releases/tag/v{version}")
@ -2036,7 +2046,8 @@ bom {
links { links {
site("https://spring.io/projects/spring-kafka") site("https://spring.io/projects/spring-kafka")
github("https://github.com/spring-projects/spring-kafka") github("https://github.com/spring-projects/spring-kafka")
javadoc("https://docs.spring.io/spring-kafka/docs/{version}/api") javadoc { version -> "https://docs.spring.io/spring-kafka/docs/%s/api"
.formatted(version.forMajorMinorGeneration()) }
docs { version -> "https://docs.spring.io/spring-kafka/reference/%s" docs { version -> "https://docs.spring.io/spring-kafka/reference/%s"
.formatted(version.forAntora()) } .formatted(version.forAntora()) }
releaseNotes("https://github.com/spring-projects/spring-kafka/releases/tag/v{version}") releaseNotes("https://github.com/spring-projects/spring-kafka/releases/tag/v{version}")
@ -2055,8 +2066,10 @@ bom {
links { links {
site("https://spring.io/projects/spring-ldap") site("https://spring.io/projects/spring-ldap")
github("https://github.com/spring-projects/spring-ldap") github("https://github.com/spring-projects/spring-ldap")
javadoc("https://docs.spring.io/spring-ldap/docs/{version}/api") javadoc { version -> "https://docs.spring.io/spring-ldap/docs/%s/api"
docs("https://docs.spring.io/spring-ldap/reference/{version}") .formatted(version.forMajorMinorGeneration()) }
docs { version -> "https://docs.spring.io/spring-ldap/reference/%s"
.formatted(version.forAntora()) }
releaseNotes("https://github.com/spring-projects/spring-ldap/releases/tag/{version}") releaseNotes("https://github.com/spring-projects/spring-ldap/releases/tag/{version}")
} }
} }
@ -2070,8 +2083,10 @@ bom {
links { links {
site("https://spring.io/projects/spring-pulsar") site("https://spring.io/projects/spring-pulsar")
github("https://github.com/spring-projects/spring-pulsar") github("https://github.com/spring-projects/spring-pulsar")
javadoc("https://docs.spring.io/spring-pulsar/docs/{version}/api/") javadoc { version -> "https://docs.spring.io/spring-pulsar/docs/%s/api/"
docs("https://docs.spring.io/spring-pulsar/docs/{version}/reference") .formatted(version.forMajorMinorGeneration()) }
docs { version -> "https://docs.spring.io/spring-pulsar/docs/%s/reference"
.formatted(version.forMajorMinorGeneration()) }
releaseNotes("https://github.com/spring-projects/spring-pulsar/releases/tag/v{version}") releaseNotes("https://github.com/spring-projects/spring-pulsar/releases/tag/v{version}")
} }
} }
@ -2085,8 +2100,10 @@ bom {
links { links {
site("https://spring.io/projects/spring-restdocs") site("https://spring.io/projects/spring-restdocs")
github("https://github.com/spring-projects/spring-restdocs") github("https://github.com/spring-projects/spring-restdocs")
javadoc("https://docs.spring.io/spring-restdocs/docs/{version}/api/") javadoc { version -> "https://docs.spring.io/spring-restdocs/docs/%s/api/"
docs("https://docs.spring.io/spring-restdocs/docs/{version}/reference/htmlsingle/") .formatted(version.forMajorMinorGeneration()) }
docs { version -> "https://docs.spring.io/spring-restdocs/docs/%s/reference/htmlsingle/"
.formatted(version.forMajorMinorGeneration()) }
releaseNotes("https://github.com/spring-projects/spring-restdocs/releases/tag/v{version}") releaseNotes("https://github.com/spring-projects/spring-restdocs/releases/tag/v{version}")
} }
} }
@ -2112,7 +2129,8 @@ bom {
links { links {
site("https://spring.io/projects/spring-security") site("https://spring.io/projects/spring-security")
github("https://github.com/spring-projects/spring-security") github("https://github.com/spring-projects/spring-security")
javadoc("https://docs.spring.io/spring-security/site/docs/{version}/api") javadoc { version -> "https://docs.spring.io/spring-security/site/docs/%s/api"
.formatted(version.forMajorMinorGeneration()) }
docs { version -> "https://docs.spring.io/spring-security/reference/%s" docs { version -> "https://docs.spring.io/spring-security/reference/%s"
.formatted(version.forAntora()) } .formatted(version.forAntora()) }
releaseNotes("https://github.com/spring-projects/spring-security/releases/tag/{version}") releaseNotes("https://github.com/spring-projects/spring-security/releases/tag/{version}")
@ -2132,7 +2150,8 @@ bom {
links { links {
site("https://spring.io/projects/spring-session") site("https://spring.io/projects/spring-session")
github("https://github.com/spring-projects/spring-session") github("https://github.com/spring-projects/spring-session")
javadoc("https://docs.spring.io/spring-session/docs/{version}/api") javadoc { version -> "https://docs.spring.io/spring-session/docs/%s/api"
.formatted(version.forMajorMinorGeneration()) }
docs { version -> "https://docs.spring.io/spring-session/reference/%s" docs { version -> "https://docs.spring.io/spring-session/reference/%s"
.formatted(version.forAntora()) } .formatted(version.forAntora()) }
releaseNotes("https://github.com/spring-projects/spring-session/releases/tag/{version}") releaseNotes("https://github.com/spring-projects/spring-session/releases/tag/{version}")
@ -2148,8 +2167,10 @@ bom {
links("spring-webservices") { links("spring-webservices") {
site("https://spring.io/projects/spring-ws") site("https://spring.io/projects/spring-ws")
github("https://github.com/spring-projects/spring-ws") github("https://github.com/spring-projects/spring-ws")
javadoc("https://docs.spring.io/spring-ws/docs/{version}/api") javadoc { version -> "https://docs.spring.io/spring-ws/docs/%s/api"
docs("https://docs.spring.io/spring-ws/docs/{version}/reference/html") .formatted(version.forMajorMinorGeneration()) }
docs { version -> "https://docs.spring.io/spring-ws/docs/%s/reference/html"
.formatted(version.forMajorMinorGeneration()) }
releaseNotes("https://github.com/spring-projects/spring-ws/releases/tag/v{version}") releaseNotes("https://github.com/spring-projects/spring-ws/releases/tag/v{version}")
} }
} }

View File

@ -223,12 +223,18 @@ task aggregatedJavadoc(type: Javadoc) {
} }
doFirst { doFirst {
def versionConstraints = dependencyVersions.versionConstraints def versionConstraints = dependencyVersions.versionConstraints
def toMajorMinorVersion = version -> {
String formatted = version.split("\\.").take(2).join('.') + '.x'
return version.endsWith("-SNAPSHOT") ? formatted + "-SNAPSHOT" : formatted
}
def springFrameworkVersion = toMajorMinorVersion(versionConstraints["org.springframework:spring-core"])
def springSecurityVersion = toMajorMinorVersion(versionConstraints["org.springframework.security:spring-security-core"])
def tomcatVersion = "${versionConstraints["org.apache.tomcat:tomcat-annotations-api"]}" def tomcatVersion = "${versionConstraints["org.apache.tomcat:tomcat-annotations-api"]}"
def tomcatDocsVersion = tomcatVersion.substring(0, tomcatVersion.lastIndexOf(".")); def tomcatDocsVersion = tomcatVersion.substring(0, tomcatVersion.lastIndexOf("."));
options.links = [ options.links = [
"https://docs.oracle.com/en/java/javase/17/docs/api/", "https://docs.oracle.com/en/java/javase/17/docs/api/",
"https://docs.spring.io/spring-framework/docs/${versionConstraints["org.springframework:spring-core"]}/javadoc-api/", "https://docs.spring.io/spring-framework/docs/${springFrameworkVersion}/javadoc-api/",
"https://docs.spring.io/spring-security/site/docs/${versionConstraints["org.springframework.security:spring-security-core"]}/api/", "https://docs.spring.io/spring-security/site/docs/${springSecurityVersion}/api/",
"https://jakarta.ee/specifications/platform/9/apidocs/", "https://jakarta.ee/specifications/platform/9/apidocs/",
"https://tomcat.apache.org/tomcat-${tomcatDocsVersion}-doc/api/", "https://tomcat.apache.org/tomcat-${tomcatDocsVersion}-doc/api/",
] as String[] ] as String[]