Skip to content

Commit 23d385c

Browse files
committed
Use offline linking for JavaDoc building
1 parent 2f640f1 commit 23d385c

9 files changed

Lines changed: 635 additions & 12 deletions

File tree

buildSrc/src/main/kotlin/net/kautler/javadoc.gradle.kts

Lines changed: 104 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2019-2022 Bjoern Kautler
2+
* Copyright 2019-2026 Bjoern Kautler
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -17,12 +17,96 @@
1717
package net.kautler
1818

1919
import org.gradle.api.JavaVersion.VERSION_1_8
20+
import org.gradle.api.resources.MissingResourceException
2021
import kotlin.text.Charsets.UTF_8
2122

2223
plugins {
2324
java
2425
}
2526

27+
data class JavadocLibraryData(
28+
val dependency: String,
29+
val version: String,
30+
val urlPart: String
31+
) {
32+
val destinationDir = layout.projectDirectory.dir("config/javadoc/$dependency-$version")
33+
}
34+
35+
val versions: Map<String, String> by project
36+
val messageFrameworkVersions: Map<String, List<String>> by project
37+
38+
val javadocLibraryData = listOf(
39+
JavadocLibraryData("cdi", versions.safeGet("cdi"), "jakarta.enterprise/jakarta.enterprise.cdi-api"),
40+
JavadocLibraryData("jakarta.inject-api", versions.safeGet("jakarta.inject-api"), "jakarta.inject/jakarta.inject-api"),
41+
JavadocLibraryData("javacord", messageFrameworkVersions.safeGet("javacord").first(), "org.javacord/javacord-api")
42+
)
43+
44+
val updateJavadocMetadata by tasks.registering
45+
46+
javadocLibraryData.forEach { javadocLibraryData ->
47+
val (dependency, version, urlPart) = javadocLibraryData
48+
val updateJavadocMetadataTask = tasks.register("update${dependency.capitalize()}JavadocMetadata") {
49+
val textResourceFactory = resources.text
50+
doLast {
51+
javadocLibraryData.destinationDir.asFile.mkdirs()
52+
53+
try {
54+
textResourceFactory.fromUri("https://static.javadoc.io/$urlPart/$version/package-list").asReader()
55+
} catch (_: MissingResourceException) {
56+
textResourceFactory.fromUri("https://static.javadoc.io/$urlPart/$version/element-list").asReader()
57+
}.buffered().use {
58+
javadocLibraryData.destinationDir.file("package-list").asFile.writer().use { writer ->
59+
val firstLine = it.readLine()
60+
if (!firstLine.startsWith("module:")) {
61+
writer.write(firstLine)
62+
writer.write("\n")
63+
}
64+
it.copyTo(writer)
65+
}
66+
}
67+
68+
try {
69+
textResourceFactory.fromUri("https://static.javadoc.io/$urlPart/$version/element-list").asReader().use {
70+
javadocLibraryData.destinationDir.file("element-list").asFile.writer().use { writer ->
71+
it.copyTo(writer)
72+
}
73+
}
74+
} catch (_: MissingResourceException) {
75+
// ignore missing element-list
76+
}
77+
}
78+
}
79+
80+
updateJavadocMetadata {
81+
dependsOn(updateJavadocMetadataTask)
82+
}
83+
}
84+
85+
val updateJdaJavadocMetadata by tasks.registering {
86+
val textResourceFactory = resources.text
87+
val jdaVersion = messageFrameworkVersions.safeGet("jda").first()
88+
val destinationDir = layout.projectDirectory.dir("config/javadoc/jda-$jdaVersion")
89+
doLast {
90+
destinationDir.asFile.mkdirs()
91+
92+
textResourceFactory.fromUri("https://ci.dv8tion.net/job/JDA/javadoc/element-list").asReader().use {
93+
destinationDir.file("package-list").asFile.writer().use { writer ->
94+
it.copyTo(writer)
95+
}
96+
}
97+
98+
textResourceFactory.fromUri("https://ci.dv8tion.net/job/JDA/javadoc/element-list").asReader().use {
99+
destinationDir.file("element-list").asFile.writer().use { writer ->
100+
it.copyTo(writer)
101+
}
102+
}
103+
}
104+
}
105+
106+
updateJavadocMetadata {
107+
dependsOn(updateJdaJavadocMetadata)
108+
}
109+
26110
tasks.withType<Javadoc>().configureEach {
27111
val javadocTask = this
28112
val javaToolChain = JavaVersion.toVersion(toolChain.version)
@@ -46,18 +130,26 @@ tasks.withType<Javadoc>().configureEach {
46130
standardDocletOptions.apply {
47131
locale = "en"
48132
encoding = UTF_8.name()
49-
links!!.apply {
50-
val versions: Map<String, String> by project
51-
val messageFrameworkVersions: Map<String, List<String>> by project
52-
if (java.targetCompatibility != VERSION_1_8) {
53-
error("JavaDoc URL for JRE needs to be adapted to new target compatibility ${java.targetCompatibility}")
54-
}
55-
add("https://docs.oracle.com/javase/8/docs/api/")
56-
add("https://static.javadoc.io/jakarta.enterprise/jakarta.enterprise.cdi-api/${versions["cdi"]}/")
57-
add("https://static.javadoc.io/jakarta.inject/jakarta.inject-api/${versions["jakarta.inject-api"]}/")
58-
add("https://static.javadoc.io/org.javacord/javacord-api/${messageFrameworkVersions.safeGet("javacord").first()}/")
59-
add("https://ci.dv8tion.net/job/JDA/javadoc/")
133+
134+
if (java.targetCompatibility != VERSION_1_8) {
135+
error("JavaDoc URL for JRE needs to be adapted to new target compatibility ${java.targetCompatibility}")
136+
}
137+
linksOffline(
138+
"https://docs.oracle.com/javase/8/docs/api/",
139+
"${layout.projectDirectory.file("config/javadoc/java-8").asFile.toURI().toURL()}"
140+
)
141+
javadocLibraryData.forEach { javadocLibraryData ->
142+
val (_, version, urlPart) = javadocLibraryData
143+
linksOffline(
144+
"https://static.javadoc.io/$urlPart/$version/",
145+
"${javadocLibraryData.destinationDir.asFile.toURI().toURL()}"
146+
)
60147
}
148+
linksOffline(
149+
"https://ci.dv8tion.net/job/JDA/javadoc/",
150+
"${layout.projectDirectory.file("config/javadoc/jda-${messageFrameworkVersions.safeGet("jda").first()}").asFile.toURI().toURL()}"
151+
)
152+
61153
isUse = true
62154
isVersion = true
63155
isAuthor = true
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
jakarta.decorator
2+
jakarta.enterprise.context
3+
jakarta.enterprise.context.control
4+
jakarta.enterprise.context.spi
5+
jakarta.enterprise.event
6+
jakarta.enterprise.inject
7+
jakarta.enterprise.inject.literal
8+
jakarta.enterprise.inject.se
9+
jakarta.enterprise.inject.spi
10+
jakarta.enterprise.inject.spi.configurator
11+
jakarta.enterprise.util
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
module:jakarta.inject
2+
jakarta.inject
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
jakarta.inject

config/javadoc/java-8/package-list

Lines changed: 217 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,217 @@
1+
java.applet
2+
java.awt
3+
java.awt.color
4+
java.awt.datatransfer
5+
java.awt.dnd
6+
java.awt.event
7+
java.awt.font
8+
java.awt.geom
9+
java.awt.im
10+
java.awt.im.spi
11+
java.awt.image
12+
java.awt.image.renderable
13+
java.awt.print
14+
java.beans
15+
java.beans.beancontext
16+
java.io
17+
java.lang
18+
java.lang.annotation
19+
java.lang.instrument
20+
java.lang.invoke
21+
java.lang.management
22+
java.lang.ref
23+
java.lang.reflect
24+
java.math
25+
java.net
26+
java.nio
27+
java.nio.channels
28+
java.nio.channels.spi
29+
java.nio.charset
30+
java.nio.charset.spi
31+
java.nio.file
32+
java.nio.file.attribute
33+
java.nio.file.spi
34+
java.rmi
35+
java.rmi.activation
36+
java.rmi.dgc
37+
java.rmi.registry
38+
java.rmi.server
39+
java.security
40+
java.security.acl
41+
java.security.cert
42+
java.security.interfaces
43+
java.security.spec
44+
java.sql
45+
java.text
46+
java.text.spi
47+
java.time
48+
java.time.chrono
49+
java.time.format
50+
java.time.temporal
51+
java.time.zone
52+
java.util
53+
java.util.concurrent
54+
java.util.concurrent.atomic
55+
java.util.concurrent.locks
56+
java.util.function
57+
java.util.jar
58+
java.util.logging
59+
java.util.prefs
60+
java.util.regex
61+
java.util.spi
62+
java.util.stream
63+
java.util.zip
64+
javax.accessibility
65+
javax.activation
66+
javax.activity
67+
javax.annotation
68+
javax.annotation.processing
69+
javax.crypto
70+
javax.crypto.interfaces
71+
javax.crypto.spec
72+
javax.imageio
73+
javax.imageio.event
74+
javax.imageio.metadata
75+
javax.imageio.plugins.bmp
76+
javax.imageio.plugins.jpeg
77+
javax.imageio.spi
78+
javax.imageio.stream
79+
javax.jws
80+
javax.jws.soap
81+
javax.lang.model
82+
javax.lang.model.element
83+
javax.lang.model.type
84+
javax.lang.model.util
85+
javax.management
86+
javax.management.loading
87+
javax.management.modelmbean
88+
javax.management.monitor
89+
javax.management.openmbean
90+
javax.management.relation
91+
javax.management.remote
92+
javax.management.remote.rmi
93+
javax.management.timer
94+
javax.naming
95+
javax.naming.directory
96+
javax.naming.event
97+
javax.naming.ldap
98+
javax.naming.spi
99+
javax.net
100+
javax.net.ssl
101+
javax.print
102+
javax.print.attribute
103+
javax.print.attribute.standard
104+
javax.print.event
105+
javax.rmi
106+
javax.rmi.CORBA
107+
javax.rmi.ssl
108+
javax.script
109+
javax.security.auth
110+
javax.security.auth.callback
111+
javax.security.auth.kerberos
112+
javax.security.auth.login
113+
javax.security.auth.spi
114+
javax.security.auth.x500
115+
javax.security.cert
116+
javax.security.sasl
117+
javax.sound.midi
118+
javax.sound.midi.spi
119+
javax.sound.sampled
120+
javax.sound.sampled.spi
121+
javax.sql
122+
javax.sql.rowset
123+
javax.sql.rowset.serial
124+
javax.sql.rowset.spi
125+
javax.swing
126+
javax.swing.border
127+
javax.swing.colorchooser
128+
javax.swing.event
129+
javax.swing.filechooser
130+
javax.swing.plaf
131+
javax.swing.plaf.basic
132+
javax.swing.plaf.metal
133+
javax.swing.plaf.multi
134+
javax.swing.plaf.nimbus
135+
javax.swing.plaf.synth
136+
javax.swing.table
137+
javax.swing.text
138+
javax.swing.text.html
139+
javax.swing.text.html.parser
140+
javax.swing.text.rtf
141+
javax.swing.tree
142+
javax.swing.undo
143+
javax.tools
144+
javax.transaction
145+
javax.transaction.xa
146+
javax.xml
147+
javax.xml.bind
148+
javax.xml.bind.annotation
149+
javax.xml.bind.annotation.adapters
150+
javax.xml.bind.attachment
151+
javax.xml.bind.helpers
152+
javax.xml.bind.util
153+
javax.xml.crypto
154+
javax.xml.crypto.dom
155+
javax.xml.crypto.dsig
156+
javax.xml.crypto.dsig.dom
157+
javax.xml.crypto.dsig.keyinfo
158+
javax.xml.crypto.dsig.spec
159+
javax.xml.datatype
160+
javax.xml.namespace
161+
javax.xml.parsers
162+
javax.xml.soap
163+
javax.xml.stream
164+
javax.xml.stream.events
165+
javax.xml.stream.util
166+
javax.xml.transform
167+
javax.xml.transform.dom
168+
javax.xml.transform.sax
169+
javax.xml.transform.stax
170+
javax.xml.transform.stream
171+
javax.xml.validation
172+
javax.xml.ws
173+
javax.xml.ws.handler
174+
javax.xml.ws.handler.soap
175+
javax.xml.ws.http
176+
javax.xml.ws.soap
177+
javax.xml.ws.spi
178+
javax.xml.ws.spi.http
179+
javax.xml.ws.wsaddressing
180+
javax.xml.xpath
181+
org.ietf.jgss
182+
org.omg.CORBA
183+
org.omg.CORBA.DynAnyPackage
184+
org.omg.CORBA.ORBPackage
185+
org.omg.CORBA.TypeCodePackage
186+
org.omg.CORBA.portable
187+
org.omg.CORBA_2_3
188+
org.omg.CORBA_2_3.portable
189+
org.omg.CosNaming
190+
org.omg.CosNaming.NamingContextExtPackage
191+
org.omg.CosNaming.NamingContextPackage
192+
org.omg.Dynamic
193+
org.omg.DynamicAny
194+
org.omg.DynamicAny.DynAnyFactoryPackage
195+
org.omg.DynamicAny.DynAnyPackage
196+
org.omg.IOP
197+
org.omg.IOP.CodecFactoryPackage
198+
org.omg.IOP.CodecPackage
199+
org.omg.Messaging
200+
org.omg.PortableInterceptor
201+
org.omg.PortableInterceptor.ORBInitInfoPackage
202+
org.omg.PortableServer
203+
org.omg.PortableServer.CurrentPackage
204+
org.omg.PortableServer.POAManagerPackage
205+
org.omg.PortableServer.POAPackage
206+
org.omg.PortableServer.ServantLocatorPackage
207+
org.omg.PortableServer.portable
208+
org.omg.SendingContext
209+
org.omg.stub.java.rmi
210+
org.w3c.dom
211+
org.w3c.dom.bootstrap
212+
org.w3c.dom.events
213+
org.w3c.dom.ls
214+
org.w3c.dom.views
215+
org.xml.sax
216+
org.xml.sax.ext
217+
org.xml.sax.helpers

0 commit comments

Comments
 (0)