Skip to content

Commit c8c7ee0

Browse files
committed
Update build config for offline Javadoc links.
Closes #1020
1 parent 8ed1bb4 commit c8c7ee0

2 files changed

Lines changed: 259 additions & 21 deletions

File tree

pom.xml

Lines changed: 258 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
<jackson2-databind.version>2.22.1</jackson2-databind.version>
3737
<jetty-reactive-httpclient.version>4.1.5</jetty-reactive-httpclient.version>
3838
<json-path.version>3.0.0</json-path.version>
39+
<jspecify.version>1.0.0</jspecify.version>
3940
<junit.version>6.1.2</junit.version>
4041
<kotlin.version>2.3.21</kotlin.version>
4142
<kotlin-coroutines.version>1.10.2</kotlin-coroutines.version>
@@ -47,6 +48,7 @@
4748
<spring-data-bom.version>2026.0.0</spring-data-bom.version>
4849
<spring-security-bom.version>7.1.0</spring-security-bom.version>
4950
<reactor.version>2025.0.6</reactor.version>
51+
<reactive-streams.version>1.0.4</reactive-streams.version>
5052

5153
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
5254
<java.version>17</java.version>
@@ -58,6 +60,26 @@
5860

5961
<!-- To be overridden by individual modules -->
6062
<java-module-name/>
63+
64+
<!-- Documentation -->
65+
<!-- @formatter:off -->
66+
<documentation.baseurl>https://docs.spring.io</documentation.baseurl>
67+
<documentation.spring-reference-url>${documentation.baseurl}/spring-framework/reference</documentation.spring-reference-url>
68+
<documentation.spring-javadoc-url>${documentation.baseurl}/spring-framework/docs/${spring.version}/javadoc-api</documentation.spring-javadoc-url>
69+
<documentation.spring-data-commons-url>${documentation.baseurl}/spring-data/commons/reference/api/java</documentation.spring-data-commons-url>
70+
<documentation.spring-data-keyvalue-url>${documentation.baseurl}/spring-data/keyvalue/reference/api/java</documentation.spring-data-keyvalue-url>
71+
<documentation.reactor-javadoc-url>https://projectreactor.io/docs/core/release/api</documentation.reactor-javadoc-url>
72+
<documentation.reactive-streams-javadoc-url>https://www.reactive-streams.org/reactive-streams-${reactive-streams.version}-javadoc</documentation.reactive-streams-javadoc-url>
73+
<documentation.jackson2-core-javadoc-url>https://javadoc.io/doc/com.fasterxml.jackson.core/jackson-core/${jackson2-databind.version}</documentation.jackson2-core-javadoc-url>
74+
<documentation.jackson2-databind-javadoc-url>https://javadoc.io/doc/com.fasterxml.jackson.core/jackson-databind/${jackson2-databind.version}</documentation.jackson2-databind-javadoc-url>
75+
<documentation.jackson3-databind-javadoc-url>https://javadoc.io/doc/tools.jackson.core/jackson-databind/${jackson-databind.version}</documentation.jackson3-databind-javadoc-url>
76+
<documentation.jspecify-javadoc-url>https://jspecify.dev/docs/api/</documentation.jspecify-javadoc-url>
77+
<documentation.spring-security-javadoc-url>${documentation.baseurl}/spring-security/site/docs/current/api</documentation.spring-security-javadoc-url>
78+
<javadoc.offline-links.directory>${project.build.directory}/javadoc-offline-links</javadoc.offline-links.directory>
79+
80+
<!-- Enabled only in CI and distribute profiles -->
81+
<javadoc.offline-links.skip>true</javadoc.offline-links.skip>
82+
<!-- @formatter:on -->
6183
</properties>
6284

6385
<inceptionYear>2016</inceptionYear>
@@ -507,6 +529,160 @@
507529
</executions>
508530
</plugin>
509531

532+
<plugin>
533+
<groupId>org.apache.maven.plugins</groupId>
534+
<artifactId>maven-dependency-plugin</artifactId>
535+
<executions>
536+
<execution>
537+
<id>unpack-javadoc-offline-links</id>
538+
<phase>generate-resources</phase>
539+
<goals>
540+
<goal>unpack</goal>
541+
</goals>
542+
<configuration>
543+
<skip>${javadoc.offline-links.skip}</skip>
544+
<markersDirectory>${project.build.directory}/javadoc-offline-links-markers</markersDirectory>
545+
<includes>element-list,package-list</includes>
546+
<artifactItems>
547+
<artifactItem>
548+
<groupId>org.springframework</groupId>
549+
<artifactId>spring-aop</artifactId>
550+
<classifier>javadoc</classifier>
551+
<type>jar</type>
552+
<outputDirectory>${javadoc.offline-links.directory}/spring-aop</outputDirectory>
553+
</artifactItem>
554+
<artifactItem>
555+
<groupId>org.springframework</groupId>
556+
<artifactId>spring-beans</artifactId>
557+
<classifier>javadoc</classifier>
558+
<type>jar</type>
559+
<outputDirectory>${javadoc.offline-links.directory}/spring-beans</outputDirectory>
560+
</artifactItem>
561+
<artifactItem>
562+
<groupId>org.springframework</groupId>
563+
<artifactId>spring-context</artifactId>
564+
<classifier>javadoc</classifier>
565+
<type>jar</type>
566+
<outputDirectory>${javadoc.offline-links.directory}/spring-context</outputDirectory>
567+
</artifactItem>
568+
<artifactItem>
569+
<groupId>org.springframework</groupId>
570+
<artifactId>spring-core</artifactId>
571+
<classifier>javadoc</classifier>
572+
<type>jar</type>
573+
<outputDirectory>${javadoc.offline-links.directory}/spring-core</outputDirectory>
574+
</artifactItem>
575+
<artifactItem>
576+
<groupId>org.springframework</groupId>
577+
<artifactId>spring-expression</artifactId>
578+
<classifier>javadoc</classifier>
579+
<type>jar</type>
580+
<outputDirectory>${javadoc.offline-links.directory}/spring-expression</outputDirectory>
581+
</artifactItem>
582+
<artifactItem>
583+
<groupId>org.springframework</groupId>
584+
<artifactId>spring-test</artifactId>
585+
<classifier>javadoc</classifier>
586+
<type>jar</type>
587+
<outputDirectory>${javadoc.offline-links.directory}/spring-test</outputDirectory>
588+
</artifactItem>
589+
<artifactItem>
590+
<groupId>org.springframework</groupId>
591+
<artifactId>spring-tx</artifactId>
592+
<classifier>javadoc</classifier>
593+
<type>jar</type>
594+
<outputDirectory>${javadoc.offline-links.directory}/spring-tx</outputDirectory>
595+
</artifactItem>
596+
<artifactItem>
597+
<groupId>org.springframework</groupId>
598+
<artifactId>spring-web</artifactId>
599+
<classifier>javadoc</classifier>
600+
<type>jar</type>
601+
<outputDirectory>${javadoc.offline-links.directory}/spring-web</outputDirectory>
602+
</artifactItem>
603+
<artifactItem>
604+
<groupId>org.springframework</groupId>
605+
<artifactId>spring-webflux</artifactId>
606+
<classifier>javadoc</classifier>
607+
<type>jar</type>
608+
<outputDirectory>${javadoc.offline-links.directory}/spring-webflux</outputDirectory>
609+
</artifactItem>
610+
<artifactItem>
611+
<groupId>org.springframework.data</groupId>
612+
<artifactId>spring-data-commons</artifactId>
613+
<classifier>javadoc</classifier>
614+
<type>jar</type>
615+
<outputDirectory>${javadoc.offline-links.directory}/spring-data-commons</outputDirectory>
616+
</artifactItem>
617+
<artifactItem>
618+
<groupId>org.springframework.data</groupId>
619+
<artifactId>spring-data-keyvalue</artifactId>
620+
<classifier>javadoc</classifier>
621+
<type>jar</type>
622+
<outputDirectory>${javadoc.offline-links.directory}/spring-data-keyvalue</outputDirectory>
623+
</artifactItem>
624+
<artifactItem>
625+
<groupId>io.projectreactor</groupId>
626+
<artifactId>reactor-core</artifactId>
627+
<classifier>javadoc</classifier>
628+
<type>jar</type>
629+
<outputDirectory>${javadoc.offline-links.directory}/reactor-core</outputDirectory>
630+
</artifactItem>
631+
<artifactItem>
632+
<groupId>org.reactivestreams</groupId>
633+
<artifactId>reactive-streams</artifactId>
634+
<version>${reactive-streams.version}</version>
635+
<classifier>javadoc</classifier>
636+
<type>jar</type>
637+
<outputDirectory>${javadoc.offline-links.directory}/reactive-streams</outputDirectory>
638+
</artifactItem>
639+
<artifactItem>
640+
<groupId>com.fasterxml.jackson.core</groupId>
641+
<artifactId>jackson-core</artifactId>
642+
<version>${jackson2-databind.version}</version>
643+
<classifier>javadoc</classifier>
644+
<type>jar</type>
645+
<outputDirectory>${javadoc.offline-links.directory}/jackson2-core</outputDirectory>
646+
</artifactItem>
647+
<artifactItem>
648+
<groupId>com.fasterxml.jackson.core</groupId>
649+
<artifactId>jackson-databind</artifactId>
650+
<version>${jackson2-databind.version}</version>
651+
<classifier>javadoc</classifier>
652+
<type>jar</type>
653+
<outputDirectory>${javadoc.offline-links.directory}/jackson2-databind</outputDirectory>
654+
</artifactItem>
655+
<artifactItem>
656+
<groupId>tools.jackson.core</groupId>
657+
<artifactId>jackson-databind</artifactId>
658+
<classifier>javadoc</classifier>
659+
<type>jar</type>
660+
<outputDirectory>${javadoc.offline-links.directory}/jackson3-databind</outputDirectory>
661+
</artifactItem>
662+
<artifactItem>
663+
<groupId>org.jspecify</groupId>
664+
<artifactId>jspecify</artifactId>
665+
<version>${jspecify.version}</version>
666+
<classifier>javadoc</classifier>
667+
<type>jar</type>
668+
<outputDirectory>${javadoc.offline-links.directory}/jspecify</outputDirectory>
669+
</artifactItem>
670+
<artifactItem>
671+
<groupId>org.springframework.security</groupId>
672+
<artifactId>spring-security-crypto</artifactId>
673+
<classifier>javadoc</classifier>
674+
<type>jar</type>
675+
<outputDirectory>${javadoc.offline-links.directory}/spring-security-crypto</outputDirectory>
676+
</artifactItem>
677+
</artifactItems>
678+
<overWriteReleases>true</overWriteReleases>
679+
<overWriteSnapshots>true</overWriteSnapshots>
680+
<overWriteIfNewer>true</overWriteIfNewer>
681+
</configuration>
682+
</execution>
683+
</executions>
684+
</plugin>
685+
510686
<plugin>
511687
<groupId>org.codehaus.mojo</groupId>
512688
<artifactId>flatten-maven-plugin</artifactId>
@@ -613,32 +789,89 @@
613789
<breakiterator>true</breakiterator>
614790
<header>${project.name}</header>
615791
<source>${java.version}</source>
616-
<javadocVersion>1.8</javadocVersion>
792+
<disableNoFonts />
617793
<quiet>true</quiet>
618794
<javadocDirectory>${shared.resources}/javadoc</javadocDirectory>
619795
<overview>${shared.resources}/javadoc/overview.html</overview>
620796
<!-- copies doc-files subdirectory which contains image resources -->
621797
<docfilessubdirs>true</docfilessubdirs>
622798
<doclint>none</doclint>
623-
<links>
624-
<link>
625-
https://docs.spring.io/spring-framework/docs/current/javadoc-api
626-
</link>
627-
<link>
628-
https://docs.spring.io/spring-data/commons/docs/current/api
629-
</link>
630-
<link>
631-
https://docs.spring.io/spring-data/keyvalue/docs/current/api
632-
</link>
633-
<link>
634-
https://docs.spring.io/spring-security/site/docs/current/api
635-
</link>
636-
<link>
637-
https://projectreactor.io/docs/core/release/api/
638-
</link>
639-
<link>https://docs.oracle.com/en/java/javase/17/docs/api/
640-
</link>
641-
</links>
799+
<detectJavaApiLink>false</detectJavaApiLink>
800+
<detectLinks>false</detectLinks>
801+
<offlineLinks>
802+
<offlineLink>
803+
<url>${documentation.spring-javadoc-url}</url>
804+
<location>${javadoc.offline-links.directory}/spring-aop</location>
805+
</offlineLink>
806+
<offlineLink>
807+
<url>${documentation.spring-javadoc-url}</url>
808+
<location>${javadoc.offline-links.directory}/spring-beans</location>
809+
</offlineLink>
810+
<offlineLink>
811+
<url>${documentation.spring-javadoc-url}</url>
812+
<location>${javadoc.offline-links.directory}/spring-context</location>
813+
</offlineLink>
814+
<offlineLink>
815+
<url>${documentation.spring-javadoc-url}</url>
816+
<location>${javadoc.offline-links.directory}/spring-core</location>
817+
</offlineLink>
818+
<offlineLink>
819+
<url>${documentation.spring-javadoc-url}</url>
820+
<location>${javadoc.offline-links.directory}/spring-expression</location>
821+
</offlineLink>
822+
<offlineLink>
823+
<url>${documentation.spring-javadoc-url}</url>
824+
<location>${javadoc.offline-links.directory}/spring-test</location>
825+
</offlineLink>
826+
<offlineLink>
827+
<url>${documentation.spring-javadoc-url}</url>
828+
<location>${javadoc.offline-links.directory}/spring-tx</location>
829+
</offlineLink>
830+
<offlineLink>
831+
<url>${documentation.spring-javadoc-url}</url>
832+
<location>${javadoc.offline-links.directory}/spring-web</location>
833+
</offlineLink>
834+
<offlineLink>
835+
<url>${documentation.spring-javadoc-url}</url>
836+
<location>${javadoc.offline-links.directory}/spring-webflux</location>
837+
</offlineLink>
838+
<offlineLink>
839+
<url>${documentation.spring-data-commons-url}</url>
840+
<location>${javadoc.offline-links.directory}/spring-data-commons</location>
841+
</offlineLink>
842+
<offlineLink>
843+
<url>${documentation.spring-data-keyvalue-url}</url>
844+
<location>${javadoc.offline-links.directory}/spring-data-keyvalue</location>
845+
</offlineLink>
846+
<offlineLink>
847+
<url>${documentation.reactor-javadoc-url}</url>
848+
<location>${javadoc.offline-links.directory}/reactor-core</location>
849+
</offlineLink>
850+
<offlineLink>
851+
<url>${documentation.reactive-streams-javadoc-url}</url>
852+
<location>${javadoc.offline-links.directory}/reactive-streams</location>
853+
</offlineLink>
854+
<offlineLink>
855+
<url>${documentation.jackson2-core-javadoc-url}</url>
856+
<location>${javadoc.offline-links.directory}/jackson2-core</location>
857+
</offlineLink>
858+
<offlineLink>
859+
<url>${documentation.jackson2-databind-javadoc-url}</url>
860+
<location>${javadoc.offline-links.directory}/jackson2-databind</location>
861+
</offlineLink>
862+
<offlineLink>
863+
<url>${documentation.jackson3-databind-javadoc-url}</url>
864+
<location>${javadoc.offline-links.directory}/jackson3-databind</location>
865+
</offlineLink>
866+
<offlineLink>
867+
<url>${documentation.jspecify-javadoc-url}</url>
868+
<location>${javadoc.offline-links.directory}/jspecify</location>
869+
</offlineLink>
870+
<offlineLink>
871+
<url>${documentation.spring-security-javadoc-url}</url>
872+
<location>${javadoc.offline-links.directory}/spring-security-crypto</location>
873+
</offlineLink>
874+
</offlineLinks>
642875
</configuration>
643876
</plugin>
644877

@@ -794,6 +1027,10 @@
7941027
<!-- Profile to be run on the CI server, JARs JavaDocs -->
7951028
<id>ci</id>
7961029

1030+
<properties>
1031+
<javadoc.offline-links.skip>false</javadoc.offline-links.skip>
1032+
</properties>
1033+
7971034
<build>
7981035
<plugins>
7991036

@@ -863,6 +1100,7 @@
8631100
<maven.install.skip>true</maven.install.skip>
8641101
<maven.deploy.skip>true</maven.deploy.skip>
8651102
<skipTests>true</skipTests>
1103+
<javadoc.offline-links.skip>false</javadoc.offline-links.skip>
8661104
</properties>
8671105

8681106
<build>

spring-vault-core/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@
170170
<dependency>
171171
<groupId>org.jspecify</groupId>
172172
<artifactId>jspecify</artifactId>
173-
<version>1.0.0</version>
173+
<version>${jspecify.version}</version>
174174
</dependency>
175175

176176
<!-- HTTP clients -->

0 commit comments

Comments
 (0)