1+ import java.net.URI
2+ import java.net.http.HttpClient
3+ import java.net.http.HttpRequest
4+ import java.net.http.HttpResponse
5+ import kotlin.io.path.absolutePathString
6+ import kotlin.io.path.createDirectories
7+ import kotlin.io.path.deleteIfExists
8+ import kotlin.io.path.notExists
9+
110plugins {
211 `java- library`
312}
@@ -33,7 +42,45 @@ afterEvaluate {
3342 }
3443 }
3544
45+ // javadoc doesn't like that static.javadoc.io redirects, so we'll manually copy the
46+ // {element,package}-list for it so it doesn't complain
47+ val elementLists = layout.buildDirectory.dir(" javadocElementLists" )
48+ val javadocElementList by tasks.registering {
49+ inputs.property(" libs" , hypoJava.javadocLibs)
50+ outputs.dir(elementLists)
51+
52+ doLast {
53+ val client = HttpClient .newBuilder().followRedirects(HttpClient .Redirect .ALWAYS ).build()
54+
55+ val outDir = elementLists.get().asFile.toPath()
56+ val base = " https://static.javadoc.io"
57+ hypoJava.javadocLibs.get().forEach { m ->
58+ val types = listOf (" element" , " package" )
59+ var response: HttpResponse <* >? = null
60+ for (type in types) {
61+ val filePath = " ${m.module.group} /${m.module.name} /${m.versionConstraint} /$type -list"
62+ val url = " $base /$filePath "
63+ val outFile = outDir.resolve(filePath)
64+ outFile.parent.createDirectories()
65+
66+ val request = HttpRequest .newBuilder().GET ().uri(URI .create(url)).build()
67+ response = client.send(request, HttpResponse .BodyHandlers .ofFile(outFile))
68+ if (response.statusCode() == 200 ) {
69+ break
70+ }
71+
72+ outFile.deleteIfExists()
73+ }
74+ if (response == null || response.statusCode() != 200 ) {
75+ throw Exception (" Failed: $response " )
76+ }
77+ }
78+ }
79+ }
80+
3681 tasks.javadoc {
82+ dependsOn(javadocElementList)
83+
3784 for (projDep in hypoJava.jdkVersionProjects.get()) {
3885 val proj = project(projDep.path)
3986
@@ -42,11 +89,16 @@ afterEvaluate {
4289 classpath + = sources
4390 }
4491
45- val base = " https://static.javadoc.io/ "
92+ val packageListDir = elementLists.get().asFile.toPath()
4693 hypoJava.javadocLibs.get().forEach { m ->
47- val url = " $base /${m.module.group} /${m.module.name} /${m.versionConstraint} "
48- opt.links(url)
94+ val base = " https://static.javadoc.io"
95+ val artifact = " ${m.module.group} /${m.module.name} /${m.versionConstraint} "
96+ val packageDir = packageListDir.resolve(artifact)
97+ val url = " $base /$artifact "
98+
99+ opt.linksOffline(url, packageDir.absolutePathString())
49100 }
101+
50102 hypoJava.javadocProjects.get().forEach { p ->
51103 val javadocTask = project(p.path).tasks.javadoc
52104 dependsOn(javadocTask)
0 commit comments