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 73e9d655c4..17c8c2a1ae 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 @@ -83,13 +83,14 @@ public class AntoraAsciidocAttributes { public Map get() { Map attributes = new LinkedHashMap<>(); + Map internal = new LinkedHashMap<>(); addBuildTypeAttribute(attributes); addGitHubAttributes(attributes); - addVersionAttributes(attributes); + addVersionAttributes(attributes, internal); addArtifactAttributes(attributes); addUrlJava(attributes); addUrlLibraryLinkAttributes(attributes); - addPropertyAttributes(attributes); + addPropertyAttributes(attributes, internal); return attributes; } @@ -115,7 +116,7 @@ public class AntoraAsciidocAttributes { return versionRoot.substring(0, lastDot) + ".x"; } - private void addVersionAttributes(Map attributes) { + private void addVersionAttributes(Map attributes, Map internal) { this.libraries.forEach((library) -> { String name = "version-" + library.getLinkRootName(); String value = library.getVersion().toString(); @@ -126,29 +127,33 @@ public class AntoraAsciidocAttributes { addDependencyVersion(attributes, "jackson-annotations", "com.fasterxml.jackson.core:jackson-annotations"); addDependencyVersion(attributes, "jackson-core", "com.fasterxml.jackson.core:jackson-core"); addDependencyVersion(attributes, "jackson-databind", "com.fasterxml.jackson.core:jackson-databind"); - addSpringDataDependencyVersion(attributes, "spring-data-commons"); - addSpringDataDependencyVersion(attributes, "spring-data-couchbase"); - addSpringDataDependencyVersion(attributes, "spring-data-cassandra"); - addSpringDataDependencyVersion(attributes, "spring-data-elasticsearch"); - addSpringDataDependencyVersion(attributes, "spring-data-jdbc"); - addSpringDataDependencyVersion(attributes, "spring-data-jpa"); - addSpringDataDependencyVersion(attributes, "spring-data-mongodb"); - addSpringDataDependencyVersion(attributes, "spring-data-neo4j"); - addSpringDataDependencyVersion(attributes, "spring-data-r2dbc"); - addSpringDataDependencyVersion(attributes, "spring-data-rest", "spring-data-rest-core"); - addSpringDataDependencyVersion(attributes, "spring-data-ldap"); + addSpringDataDependencyVersion(attributes, internal, "spring-data-commons"); + addSpringDataDependencyVersion(attributes, internal, "spring-data-couchbase"); + addSpringDataDependencyVersion(attributes, internal, "spring-data-cassandra"); + addSpringDataDependencyVersion(attributes, internal, "spring-data-elasticsearch"); + addSpringDataDependencyVersion(attributes, internal, "spring-data-jdbc"); + addSpringDataDependencyVersion(attributes, internal, "spring-data-jpa"); + addSpringDataDependencyVersion(attributes, internal, "spring-data-mongodb"); + addSpringDataDependencyVersion(attributes, internal, "spring-data-neo4j"); + addSpringDataDependencyVersion(attributes, internal, "spring-data-r2dbc"); + addSpringDataDependencyVersion(attributes, internal, "spring-data-rest", "spring-data-rest-core"); + addSpringDataDependencyVersion(attributes, internal, "spring-data-ldap"); } - private void addSpringDataDependencyVersion(Map attributes, String artifactId) { - addSpringDataDependencyVersion(attributes, artifactId, artifactId); + private void addSpringDataDependencyVersion(Map attributes, Map internal, + String artifactId) { + addSpringDataDependencyVersion(attributes, internal, artifactId, artifactId); } - private void addSpringDataDependencyVersion(Map attributes, String name, String artifactId) { - String version = getVersion("org.springframework.data:" + artifactId); + private void addSpringDataDependencyVersion(Map attributes, Map internal, + String name, String artifactId) { + String groupAndArtifactId = "org.springframework.data:" + artifactId; + addDependencyVersion(attributes, name, groupAndArtifactId); + String version = getVersion(groupAndArtifactId); 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"); + internal.put("antoraversion-" + name, antoraVersion); + internal.put("dotxversion-" + name, majorMinor + ".x"); } private void addDependencyVersion(Map attributes, String name, String groupAndArtifactId) { @@ -173,6 +178,7 @@ public class AntoraAsciidocAttributes { } private void addUrlLibraryLinkAttributes(Map attributes) { + Map packageAttributes = new LinkedHashMap<>(); this.libraries.forEach((library) -> { String prefix = "url-" + library.getLinkRootName() + "-"; library.getLinks().forEach((name, link) -> { @@ -181,22 +187,24 @@ public class AntoraAsciidocAttributes { link.packages() .stream() .map(this::packageAttributeName) - .forEach((packageAttributeName) -> attributes.put(packageAttributeName, "{" + linkName + "}")); + .forEach((packageAttributeName) -> packageAttributes.put(packageAttributeName, + "{" + linkName + "}")); }); }); + attributes.putAll(packageAttributes); } private String packageAttributeName(String packageName) { return "javadoc-location-" + packageName.replace('.', '-'); } - private void addPropertyAttributes(Map attributes) { + private void addPropertyAttributes(Map attributes, Map internal) { Properties properties = new Properties() { @Override public synchronized Object put(Object key, Object value) { // Put directly because order is important for us - return attributes.put(key.toString(), value.toString()); + return attributes.put(key.toString(), resolve(value.toString(), internal)); } }; @@ -208,4 +216,11 @@ public class AntoraAsciidocAttributes { } } + private String resolve(String value, Map internal) { + for (Map.Entry entry : internal.entrySet()) { + value = value.replace("{" + entry.getKey() + "}", entry.getValue()); + } + return value; + } + } 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 992d303bef..043619c2e8 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 @@ -35,34 +35,34 @@ 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-javadoc}/api +url-spring-data-cassandra-javadoc=https://docs.spring.io/spring-data/cassandra/docs/{dotxversion-spring-data-cassandra}/api url-spring-data-cassandra-site=https://spring.io/projects/spring-data-cassandra -url-spring-data-cassandra-docs=https://docs.spring.io/spring-data/cassandra/reference/{version-spring-data-cassandra-docs} -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-cassandra-docs=https://docs.spring.io/spring-data/cassandra/reference/{antoraversion-spring-data-cassandra} +url-spring-data-commons-javadoc=https://docs.spring.io/spring-data/commons/docs/{dotxversion-spring-data-commons}/api +url-spring-data-couchbase-docs=https://docs.spring.io/spring-data/couchbase/reference/{antoraversion-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-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-couchbase-javadoc=https://docs.spring.io/spring-data/couchbase/docs/{dotxversion-spring-data-couchbase}/api +url-spring-data-elasticsearch-javadoc=https://docs.spring.io/spring-data/elasticsearch/docs/{dotxversion-spring-data-elasticsearch}/api +url-spring-data-elasticsearch-docs=https://docs.spring.io/spring-data/elasticsearch/reference/{antoraversion-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-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-docs} -url-spring-data-jpa-javadoc=https://docs.spring.io/spring-data/jpa/docs/{version-spring-data-jpa-javadoc}/api +url-spring-data-jdbc-docs=https://docs.spring.io/spring-data/relational/reference/{antoraversion-spring-data-jdbc} +url-spring-data-jpa-javadoc=https://docs.spring.io/spring-data/jpa/docs/{dotxversion-spring-data-jpa}/api url-spring-data-jpa-site=https://spring.io/projects/spring-data-jpa -url-spring-data-jpa-docs=https://docs.spring.io/spring-data/jpa/reference/{version-spring-data-jpa-docs} +url-spring-data-jpa-docs=https://docs.spring.io/spring-data/jpa/reference/{antoraversion-spring-data-jpa} url-spring-data-ldap-site=https://spring.io/projects/spring-data-ldap -url-spring-data-ldap-docs=https://docs.spring.io/spring-data/ldap/reference/{version-spring-data-ldap-docs} -url-spring-data-mongodb-javadoc=https://docs.spring.io/spring-data/mongodb/docs/{version-spring-data-mongodb-javadoc}/api +url-spring-data-ldap-docs=https://docs.spring.io/spring-data/ldap/reference/{antoraversion-spring-data-ldap} +url-spring-data-mongodb-javadoc=https://docs.spring.io/spring-data/mongodb/docs/{dotxversion-spring-data-mongodb}/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-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-mongodb-docs=https://docs.spring.io/spring-data/mongodb/reference/{antoraversion-spring-data-mongodb} +url-spring-data-neo4j-javadoc=https://docs.spring.io/spring-data/neo4j/docs/{dotxversion-spring-data-neo4j}/api +url-spring-data-neo4j-docs=https://docs.spring.io/spring-data/neo4j/reference/{antoraversion-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-javadoc}/api -url-spring-data-r2dbc-docs=https://docs.spring.io/spring-data/relational/reference/{version-spring-data-r2dbc-docs} +url-spring-data-r2dbc-javadoc=https://docs.spring.io/spring-data/r2dbc/docs/{dotxversion-spring-data-r2dbc}/api +url-spring-data-r2dbc-docs=https://docs.spring.io/spring-data/relational/reference/{antoraversion-spring-data-r2dbc} 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-javadoc}/api +url-spring-data-rest-javadoc=https://docs.spring.io/spring-data/rest/docs/{dotxversion-spring-data-rest}/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 274debeab0..4a10837112 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 @@ -97,16 +97,22 @@ class AntoraAsciidocAttributesTests { void versionReferenceFromSpringDataDependencyReleaseVersion() { AntoraAsciidocAttributes attributes = new AntoraAsciidocAttributes("1.2.3", true, BuildType.OPEN_SOURCE, null, 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"); + assertThat(attributes.get()).containsEntry("version-spring-data-mongodb", "3.2.5"); + assertThat(attributes.get()).containsEntry("url-spring-data-mongodb-docs", + "https://docs.spring.io/spring-data/mongodb/reference/3.2"); + assertThat(attributes.get()).containsEntry("url-spring-data-mongodb-javadoc", + "https://docs.spring.io/spring-data/mongodb/docs/3.2.x/api"); } @Test void versionReferenceFromSpringDataDependencySnapshotVersion() { AntoraAsciidocAttributes attributes = new AntoraAsciidocAttributes("1.2.3", true, BuildType.OPEN_SOURCE, 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"); + assertThat(attributes.get()).containsEntry("version-spring-data-mongodb", "3.2.0-SNAPSHOT"); + assertThat(attributes.get()).containsEntry("url-spring-data-mongodb-docs", + "https://docs.spring.io/spring-data/mongodb/reference/3.2-SNAPSHOT"); + assertThat(attributes.get()).containsEntry("url-spring-data-mongodb-javadoc", + "https://docs.spring.io/spring-data/mongodb/docs/3.2.x/api"); } @Test