diff --git a/buildSrc/src/main/java/org/springframework/boot/build/antora/AntoraAsciidocAttributes.java b/buildSrc/src/main/java/org/springframework/boot/build/antora/AntoraAsciidocAttributes.java index 6745386e1da..475a5720671 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/antora/AntoraAsciidocAttributes.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/antora/AntoraAsciidocAttributes.java @@ -19,11 +19,13 @@ package org.springframework.boot.build.antora; import java.io.IOException; import java.io.InputStream; import java.io.UncheckedIOException; +import java.util.Arrays; import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Properties; +import java.util.stream.Collectors; import org.gradle.api.Project; @@ -130,13 +132,21 @@ public class AntoraAsciidocAttributes { } private void addSpringDataDependencyVersion(Map 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 attributes, String name, String groupAndArtifactId) { + attributes.put("version-" + name, getVersion(groupAndArtifactId)); + } + + private String getVersion(String groupAndArtifactId) { String version = this.dependencyVersions.get(groupAndArtifactId); Assert.notNull(version, () -> "No version found for " + groupAndArtifactId); - attributes.put("version-" + name, version); + return version; } private void addArtifactAttributes(Map attributes) { diff --git a/buildSrc/src/main/java/org/springframework/boot/build/bom/Library.java b/buildSrc/src/main/java/org/springframework/boot/build/bom/Library.java index 4a0928c0c99..f8598f46697 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/bom/Library.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/bom/Library.java @@ -253,6 +253,15 @@ public class Library { 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() { return toString().split("[.-]"); } diff --git a/buildSrc/src/main/resources/org/springframework/boot/build/antora/antora-asciidoc-attributes.properties b/buildSrc/src/main/resources/org/springframework/boot/build/antora/antora-asciidoc-attributes.properties index 20f9edb30b3..81f258cd81b 100644 --- a/buildSrc/src/main/resources/org/springframework/boot/build/antora/antora-asciidoc-attributes.properties +++ b/buildSrc/src/main/resources/org/springframework/boot/build/antora/antora-asciidoc-attributes.properties @@ -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-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-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-commons-javadoc=https://docs.spring.io/spring-data/commons/docs/{version-spring-data-commons}/api -url-spring-data-couchbase-docs=https://docs.spring.io/spring-data/couchbase/reference/{version-spring-data-couchbase} +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-docs} 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-elasticsearch-javadoc=https://docs.spring.io/spring-data/elasticsearch/docs/{version-spring-data-elasticsearch}/api -url-spring-data-elasticsearch-docs=https://docs.spring.io/spring-data/elasticsearch/reference/{version-spring-data-elasticsearch} +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-javadoc}/api +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-envers-site=https://spring.io/projects/spring-data-envers 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-jdbc-docs=https://docs.spring.io/spring-data/relational/reference/{version-spring-data-jdbc} -url-spring-data-jpa-javadoc=https://docs.spring.io/spring-data/jpa/docs/{version-spring-data-jpa}/api +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-javadoc}/api 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-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-docs=https://docs.spring.io/spring-data/mongodb/reference/{version-spring-data-mongodb} -url-spring-data-neo4j-javadoc=https://docs.spring.io/spring-data/neo4j/docs/{version-spring-data-neo4j}/api -url-spring-data-neo4j-docs=https://docs.spring.io/spring-data/neo4j/reference/{version-spring-data-neo4j} +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-javadoc}/api +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-r2dbc-javadoc=https://docs.spring.io/spring-data/r2dbc/docs/{version-spring-data-r2dbc}/api -url-spring-data-r2dbc-docs=https://docs.spring.io/spring-data/relational/reference/{version-spring-data-r2dbc} +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-docs} 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-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} diff --git a/buildSrc/src/test/java/org/springframework/boot/build/antora/AntoraAsciidocAttributesTests.java b/buildSrc/src/test/java/org/springframework/boot/build/antora/AntoraAsciidocAttributesTests.java index 65ccedc0c24..dbba3f414ab 100644 --- a/buildSrc/src/test/java/org/springframework/boot/build/antora/AntoraAsciidocAttributesTests.java +++ b/buildSrc/src/test/java/org/springframework/boot/build/antora/AntoraAsciidocAttributesTests.java @@ -38,6 +38,7 @@ import static org.assertj.core.api.Assertions.assertThat; * Tests for {@link AntoraAsciidocAttributes}. * * @author Phillip Webb + * @author Stephane Nicoll */ class AntoraAsciidocAttributesTests { @@ -78,10 +79,19 @@ class AntoraAsciidocAttributesTests { } @Test - void versionReferenceFromSpringDataDependencyVersion() { + void versionReferenceFromSpringDataDependencyReleaseVersion() { AntoraAsciidocAttributes attributes = new AntoraAsciidocAttributes("1.2.3", true, null, - mockDependencyVersions(), null); - assertThat(attributes.get()).containsEntry("version-spring-data-mongodb", "1.2.3"); + mockDependencyVersions("3.2.5"), null); + 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 @@ -173,29 +183,33 @@ class AntoraAsciidocAttributesTests { } private Map mockDependencyVersions() { + return mockDependencyVersions("1.2.3"); + } + + private Map mockDependencyVersions(String version) { Map versions = new LinkedHashMap<>(); - addMockSpringDataVersion(versions, "spring-data-commons"); - addMockSpringDataVersion(versions, "spring-data-cassandra"); - addMockSpringDataVersion(versions, "spring-data-couchbase"); - addMockSpringDataVersion(versions, "spring-data-elasticsearch"); - addMockSpringDataVersion(versions, "spring-data-jdbc"); - addMockSpringDataVersion(versions, "spring-data-jpa"); - addMockSpringDataVersion(versions, "spring-data-mongodb"); - addMockSpringDataVersion(versions, "spring-data-neo4j"); - addMockSpringDataVersion(versions, "spring-data-r2dbc"); - addMockSpringDataVersion(versions, "spring-data-rest-core"); - addMockJacksonVersion(versions, "jackson-annotations"); - addMockJacksonVersion(versions, "jackson-core"); - addMockJacksonVersion(versions, "jackson-databind"); + addMockSpringDataVersion(versions, "spring-data-commons", version); + addMockSpringDataVersion(versions, "spring-data-cassandra", version); + addMockSpringDataVersion(versions, "spring-data-couchbase", version); + addMockSpringDataVersion(versions, "spring-data-elasticsearch", version); + addMockSpringDataVersion(versions, "spring-data-jdbc", version); + addMockSpringDataVersion(versions, "spring-data-jpa", version); + addMockSpringDataVersion(versions, "spring-data-mongodb", version); + addMockSpringDataVersion(versions, "spring-data-neo4j", version); + addMockSpringDataVersion(versions, "spring-data-r2dbc", version); + addMockSpringDataVersion(versions, "spring-data-rest-core", version); + addMockJacksonVersion(versions, "jackson-annotations", version); + addMockJacksonVersion(versions, "jackson-core", version); + addMockJacksonVersion(versions, "jackson-databind", version); return versions; } - private void addMockSpringDataVersion(Map versions, String artifactId) { - versions.put("org.springframework.data:" + artifactId, "1.2.3"); + private void addMockSpringDataVersion(Map versions, String artifactId, String version) { + versions.put("org.springframework.data:" + artifactId, version); } - private void addMockJacksonVersion(Map versions, String artifactId) { - versions.put("com.fasterxml.jackson.core:" + artifactId, "2.3.4"); + private void addMockJacksonVersion(Map versions, String artifactId, String version) { + versions.put("com.fasterxml.jackson.core:" + artifactId, version); } } diff --git a/buildSrc/src/test/java/org/springframework/boot/build/bom/LibraryTests.java b/buildSrc/src/test/java/org/springframework/boot/build/bom/LibraryTests.java index e3af38dc17a..95124e1fc08 100644 --- a/buildSrc/src/test/java/org/springframework/boot/build/bom/LibraryTests.java +++ b/buildSrc/src/test/java/org/springframework/boot/build/bom/LibraryTests.java @@ -72,4 +72,16 @@ class LibraryTests { 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"); + } + } diff --git a/spring-boot-project/spring-boot-dependencies/build.gradle b/spring-boot-project/spring-boot-dependencies/build.gradle index e50d1b812c7..fddf8d08381 100644 --- a/spring-boot-project/spring-boot-dependencies/build.gradle +++ b/spring-boot-project/spring-boot-dependencies/build.gradle @@ -1911,8 +1911,10 @@ bom { links { site("https://spring.io/projects/spring-amqp") github("https://github.com/spring-projects/spring-amqp") - javadoc("https://docs.spring.io/spring-amqp/docs/{version}/api") - docs("https://docs.spring.io/spring-amqp/reference/{version}") + javadoc { version -> "https://docs.spring.io/spring-amqp/docs/%s/api" + .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}") } } @@ -1926,7 +1928,8 @@ bom { links { site("https://spring.io/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" .formatted(version.forAntora()) } releaseNotes("https://github.com/spring-projects/spring-authorization-server/releases/tag/{version}") @@ -1942,7 +1945,8 @@ bom { links { site("https://spring.io/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" .formatted(version.forAntora()) } releaseNotes("https://github.com/spring-projects/spring-batch/releases/tag/v{version}") @@ -1972,8 +1976,10 @@ bom { links { site("https://spring.io/projects/spring-framework") github("https://github.com/spring-projects/spring-framework") - javadoc("https://docs.spring.io/spring-framework/docs/{version}/javadoc-api") - docs("https://docs.spring.io/spring-framework/reference/{version}") + javadoc { version ->"https://docs.spring.io/spring-framework/docs/%s/javadoc-api" + .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}") } } @@ -1988,7 +1994,8 @@ bom { links { site("https://spring.io/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" .formatted(version.forAntora()) } releaseNotes("https://github.com/spring-projects/spring-graphql/releases/tag/v{version}") @@ -2004,8 +2011,10 @@ bom { links { site("https://spring.io/projects/spring-hateoas") github("https://github.com/spring-projects/spring-hateoas") - javadoc("https://docs.spring.io/spring-hateoas/docs/{version}/api") - docs("https://docs.spring.io/spring-hateoas/docs/{version}/reference/html") + javadoc { version -> "https://docs.spring.io/spring-hateoas/docs/%s/api" + .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}") } } @@ -2019,7 +2028,8 @@ bom { links { site("https://spring.io/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" .formatted(version.forAntora()) } releaseNotes("https://github.com/spring-projects/spring-integration/releases/tag/v{version}") @@ -2036,7 +2046,8 @@ bom { links { site("https://spring.io/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" .formatted(version.forAntora()) } releaseNotes("https://github.com/spring-projects/spring-kafka/releases/tag/v{version}") @@ -2055,8 +2066,10 @@ bom { links { site("https://spring.io/projects/spring-ldap") github("https://github.com/spring-projects/spring-ldap") - javadoc("https://docs.spring.io/spring-ldap/docs/{version}/api") - docs("https://docs.spring.io/spring-ldap/reference/{version}") + javadoc { version -> "https://docs.spring.io/spring-ldap/docs/%s/api" + .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}") } } @@ -2070,8 +2083,10 @@ bom { links { site("https://spring.io/projects/spring-pulsar") github("https://github.com/spring-projects/spring-pulsar") - javadoc("https://docs.spring.io/spring-pulsar/docs/{version}/api/") - docs("https://docs.spring.io/spring-pulsar/docs/{version}/reference") + javadoc { version -> "https://docs.spring.io/spring-pulsar/docs/%s/api/" + .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}") } } @@ -2085,8 +2100,10 @@ bom { links { site("https://spring.io/projects/spring-restdocs") github("https://github.com/spring-projects/spring-restdocs") - javadoc("https://docs.spring.io/spring-restdocs/docs/{version}/api/") - docs("https://docs.spring.io/spring-restdocs/docs/{version}/reference/htmlsingle/") + javadoc { version -> "https://docs.spring.io/spring-restdocs/docs/%s/api/" + .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}") } } @@ -2112,7 +2129,8 @@ bom { links { site("https://spring.io/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" .formatted(version.forAntora()) } releaseNotes("https://github.com/spring-projects/spring-security/releases/tag/{version}") @@ -2132,7 +2150,8 @@ bom { links { site("https://spring.io/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" .formatted(version.forAntora()) } releaseNotes("https://github.com/spring-projects/spring-session/releases/tag/{version}") @@ -2148,8 +2167,10 @@ bom { links("spring-webservices") { site("https://spring.io/projects/spring-ws") github("https://github.com/spring-projects/spring-ws") - javadoc("https://docs.spring.io/spring-ws/docs/{version}/api") - docs("https://docs.spring.io/spring-ws/docs/{version}/reference/html") + javadoc { version -> "https://docs.spring.io/spring-ws/docs/%s/api" + .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}") } } diff --git a/spring-boot-project/spring-boot-docs/build.gradle b/spring-boot-project/spring-boot-docs/build.gradle index 7427db3e4ed..6883de0b76d 100644 --- a/spring-boot-project/spring-boot-docs/build.gradle +++ b/spring-boot-project/spring-boot-docs/build.gradle @@ -223,12 +223,18 @@ task aggregatedJavadoc(type: Javadoc) { } doFirst { 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 tomcatDocsVersion = tomcatVersion.substring(0, tomcatVersion.lastIndexOf(".")); options.links = [ "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-security/site/docs/${versionConstraints["org.springframework.security:spring-security-core"]}/api/", + "https://docs.spring.io/spring-framework/docs/${springFrameworkVersion}/javadoc-api/", + "https://docs.spring.io/spring-security/site/docs/${springSecurityVersion}/api/", "https://jakarta.ee/specifications/platform/9/apidocs/", "https://tomcat.apache.org/tomcat-${tomcatDocsVersion}-doc/api/", ] as String[]