gradle-maven-publish-plugin
gradle-maven-publish-plugin copied to clipboard
Javadoc jar is empty when applying Kotlin, Dokka, and pluginPublish plugins
Apply
plugins {
id("org.jetbrains.kotlin.jvm") version "2.1.20"
id("org.jetbrains.dokka") version "2.0.0"
id("com.vanniktech.maven.publish") version "0.31.0"
id("com.gradle.plugin-publish") version "1.3.1"
}
in a Gradle plugin project written in Kotlin only, and run ./gradlew publishToMavenLocal, you'll see
> Task :checkKotlinGradlePluginConfigurationErrors SKIPPED
> Task :pluginDescriptors
> Task :processResources
> Task :generatePomFileForPluginMavenPublication
> Task :sourcesJar
> Task :generatePomFileForShadowPluginPluginMarkerMavenPublication
> Task :signShadowPluginPluginMarkerMavenPublication
> Task :publishShadowPluginPluginMarkerMavenPublicationToMavenLocal
> Task :compileKotlin
> Task :compileJava NO-SOURCE
> Task :classes
> Task :javadoc NO-SOURCE
> Task :javadocJar
> Task :jar
> Task :generateMetadataFileForPluginMavenPublication
> Task :signPluginMavenPublication
> Task :publishPluginMavenPublicationToMavenLocal
> Task :publishToMavenLocal
The javadocJar task is useless, and an empty javadoc.jar will be published.
dua ~/.m2/repository/com/gradleup/shadow/shadow-gradle-plugin/9.0.0-SNAPSHOT/
4.10 KB maven-metadata-local.xml
4.10 KB shadow-gradle-plugin-9.0.0-SNAPSHOT-javadoc.jar
4.10 KB shadow-gradle-plugin-9.0.0-SNAPSHOT-javadoc.jar.asc
4.10 KB shadow-gradle-plugin-9.0.0-SNAPSHOT-sources.jar.asc
4.10 KB shadow-gradle-plugin-9.0.0-SNAPSHOT.jar.asc
4.10 KB shadow-gradle-plugin-9.0.0-SNAPSHOT.module.asc
4.10 KB shadow-gradle-plugin-9.0.0-SNAPSHOT.pom
4.10 KB shadow-gradle-plugin-9.0.0-SNAPSHOT.pom.asc
12.29 KB shadow-gradle-plugin-9.0.0-SNAPSHOT.module
61.44 KB shadow-gradle-plugin-9.0.0-SNAPSHOT-sources.jar
212.99 KB shadow-gradle-plugin-9.0.0-SNAPSHOT.jar
319.49 KB total
Replace id("com.gradle.plugin-publish") version "1.3.1" with id("java-gradle-plugin") and try again, you'll see
> Task :checkKotlinGradlePluginConfigurationErrors SKIPPED
> Task :generatePomFileForShadowPluginPluginMarkerMavenPublication
> Task :generatePomFileForPluginMavenPublication
> Task :signShadowPluginPluginMarkerMavenPublication UP-TO-DATE
> Task :sourcesJar UP-TO-DATE
> Task :pluginDescriptors UP-TO-DATE
> Task :processResources UP-TO-DATE
> Task :publishShadowPluginPluginMarkerMavenPublicationToMavenLocal
> Task :compileKotlin
> Task :compileJava NO-SOURCE
> Task :classes UP-TO-DATE
> Task :jar UP-TO-DATE
> Task :generateMetadataFileForPluginMavenPublication
> Task :dokkaGeneratePublicationHtml
> Task :logLinkDokkaGeneratePublicationHtml
Generated Dokka HTML publication: http://localhost:63342/shadow/docs/api/index.html
> Task :pluginMavenDokkaJavadocJar
> Task :signPluginMavenPublication
> Task :publishPluginMavenPublicationToMavenLocal
> Task :publishToMavenLocal
The pluginMavenDokkaJavadocJar task will be executed instead of javadocJar, and the valid javadoc.jar will be published.
dua ~/.m2/repository/com/gradleup/shadow/shadow-gradle-plugin/9.0.0-SNAPSHOT/
4.10 KB maven-metadata-local.xml
4.10 KB shadow-gradle-plugin-9.0.0-SNAPSHOT-javadoc.jar.asc
4.10 KB shadow-gradle-plugin-9.0.0-SNAPSHOT-sources.jar.asc
4.10 KB shadow-gradle-plugin-9.0.0-SNAPSHOT.jar.asc
4.10 KB shadow-gradle-plugin-9.0.0-SNAPSHOT.module.asc
4.10 KB shadow-gradle-plugin-9.0.0-SNAPSHOT.pom
4.10 KB shadow-gradle-plugin-9.0.0-SNAPSHOT.pom.asc
8.19 KB shadow-gradle-plugin-9.0.0-SNAPSHOT.module
61.44 KB shadow-gradle-plugin-9.0.0-SNAPSHOT-sources.jar
262.14 KB shadow-gradle-plugin-9.0.0-SNAPSHOT.jar
1.05 MB shadow-gradle-plugin-9.0.0-SNAPSHOT-javadoc.jar
1.41 MB total
There is a full diff between the before and the after:
Folder Diff Details
diff --color=auto -r 9.0.0-SNAPSHOT-before/maven-metadata-local.xml 9.0.0-SNAPSHOT-after/maven-metadata-local.xml
6c6
< <lastUpdated>20250414021245</lastUpdated>
---
> <lastUpdated>20250414021317</lastUpdated>
12c12,13
< <extension>jar</extension>
---
> <classifier>sources</classifier>
> <extension>jar.asc</extension>
14c15
< <updated>20250414021245</updated>
---
> <updated>20250414021317</updated>
17c18
< <extension>jar.asc</extension>
---
> <extension>jar</extension>
19c20
< <updated>20250414021245</updated>
---
> <updated>20250414021317</updated>
22,23c23
< <classifier>javadoc</classifier>
< <extension>jar.asc</extension>
---
> <extension>pom</extension>
25c25
< <updated>20250414021245</updated>
---
> <updated>20250414021317</updated>
29c29
< <extension>jar.asc</extension>
---
> <extension>jar</extension>
31c31
< <updated>20250414021245</updated>
---
> <updated>20250414021317</updated>
36c36
< <updated>20250414021245</updated>
---
> <updated>20250414021317</updated>
39c39,40
< <extension>pom</extension>
---
> <classifier>javadoc</classifier>
> <extension>jar.asc</extension>
41c42
< <updated>20250414021245</updated>
---
> <updated>20250414021317</updated>
47c48
< <updated>20250414021245</updated>
---
> <updated>20250414021317</updated>
50,51c51
< <classifier>sources</classifier>
< <extension>jar</extension>
---
> <extension>pom.asc</extension>
53c53
< <updated>20250414021245</updated>
---
> <updated>20250414021317</updated>
56c56
< <extension>pom.asc</extension>
---
> <extension>module.asc</extension>
58c58
< <updated>20250414021245</updated>
---
> <updated>20250414021317</updated>
61c61
< <extension>module.asc</extension>
---
> <extension>jar.asc</extension>
63c63
< <updated>20250414021245</updated>
---
> <updated>20250414021317</updated>
Binary files 9.0.0-SNAPSHOT-before/shadow-gradle-plugin-9.0.0-SNAPSHOT-javadoc.jar and 9.0.0-SNAPSHOT-after/shadow-gradle-plugin-9.0.0-SNAPSHOT-javadoc.jar differ
diff --color=auto -r 9.0.0-SNAPSHOT-before/shadow-gradle-plugin-9.0.0-SNAPSHOT-javadoc.jar.asc 9.0.0-SNAPSHOT-after/shadow-gradle-plugin-9.0.0-SNAPSHOT-javadoc.jar.asc
4,6c4,6
< iF4EABYKAAYFAmf8bx0ACgkQAgvaYjxlHg7OWwEAyjXI2T1wfEJwdPnxIortktvW
< PVXagUFsCDKxYmzhA0sA/R0licbef1xPBAOxwAmFrez2m+31ttVSDIODghsT298N
< =UIQx
---
> iF4EABYKAAYFAmf8bz0ACgkQAgvaYjxlHg5BkgEAynqQmeVZVyNJ1ngF4mjucbXZ
> h14PGwxxa7+bfp7fVywA/3qctGS+isOGRD6YxFm66uU4SacFY0F5zhZ1zBd2YecD
> =UYb/
diff --color=auto -r 9.0.0-SNAPSHOT-before/shadow-gradle-plugin-9.0.0-SNAPSHOT-sources.jar.asc 9.0.0-SNAPSHOT-after/shadow-gradle-plugin-9.0.0-SNAPSHOT-sources.jar.asc
4,6c4,6
< iF4EABYKAAYFAmf8bx0ACgkQAgvaYjxlHg6M7gEAmNe9GpJG6XlMrNtE9PgEeTQa
< vboQxlvI8RpxbS/SOEIBAP6ZGAMWrgDGLrITc/outWrYdkED+vcNY2hvQohgI1AD
< =3FiM
---
> iF4EABYKAAYFAmf8bz0ACgkQAgvaYjxlHg6Y9AD+IEUv0C0A3BaR7ihd+I2SG6Oi
> lsmFkKygmv2o6GnqQGwA/1y58xs7P1mn8+wCnOwMut8gH8WWpzZizXroW5YEacAL
> =F+Mc
diff --color=auto -r 9.0.0-SNAPSHOT-before/shadow-gradle-plugin-9.0.0-SNAPSHOT.jar.asc 9.0.0-SNAPSHOT-after/shadow-gradle-plugin-9.0.0-SNAPSHOT.jar.asc
4,6c4,6
< iF4EABYKAAYFAmf8bx0ACgkQAgvaYjxlHg5jnAEA4J8o5K3rdUv5e43znhNMIYUN
< aT9T2ofBY1WnQ6JBVoABALM22ubHiEC33DcI5bS/6dWw6M5zwMDVm17lNiH9/iEK
< =fJnf
---
> iF4EABYKAAYFAmf8bz0ACgkQAgvaYjxlHg6eWwD/UVXkA2yNXQc8VJxCFbPzuog6
> RwetpYUwMCf77zHgnDABAP5+GOo8kKrVBD4m+ugqw6R8W3ATffITsIdb82kqFt0O
> =QupS
diff --color=auto -r 9.0.0-SNAPSHOT-before/shadow-gradle-plugin-9.0.0-SNAPSHOT.module 9.0.0-SNAPSHOT-after/shadow-gradle-plugin-9.0.0-SNAPSHOT.module
186,237d185
< "name": "javadocElements",
< "attributes": {
< "org.gradle.category": "documentation",
< "org.gradle.dependency.bundling": "external",
< "org.gradle.docstype": "javadoc",
< "org.gradle.usage": "java-runtime"
< },
< "files": [
< {
< "name": "shadow-gradle-plugin-9.0.0-SNAPSHOT-javadoc.jar",
< "url": "shadow-gradle-plugin-9.0.0-SNAPSHOT-javadoc.jar",
< "size": 261,
< "sha512": "d218d40fcd425e4886a48a1a668b427dd192a1939035d29dae15b430d4f57b40cb0bfc5402453da81e003ba713a1494e7f17cb6aff0df08540f4809d54543708",
< "sha256": "340cc78aae103c797ae417411e71f66132a34988e4046291d5d4707b8a15e62b",
< "sha1": "9c02f4f0a239610d50bd3198f3c2704402c50eec",
< "md5": "e37b79339ba5959eee9e5e568167c723"
< }
< ],
< "capabilities": [
< {
< "group": "com.github.jengelman.gradle.plugins",
< "name": "shadow",
< "version": "9.0.0-SNAPSHOT"
< },
< {
< "group": "com.github.johnrengelman",
< "name": "shadow",
< "version": "9.0.0-SNAPSHOT"
< },
< {
< "group": "com.gradleup.shadow",
< "name": "shadow-gradle-plugin",
< "version": "9.0.0-SNAPSHOT"
< },
< {
< "group": "gradle.plugin.com.github.jengelman.gradle.plugins",
< "name": "shadow",
< "version": "9.0.0-SNAPSHOT"
< },
< {
< "group": "io.github.goooler.shadow",
< "name": "shadow-gradle-plugin",
< "version": "9.0.0-SNAPSHOT"
< },
< {
< "group": "gradle.plugin.com.github.johnrengelman",
< "name": "shadow",
< "version": "9.0.0-SNAPSHOT"
< }
< ]
< },
< {
diff --color=auto -r 9.0.0-SNAPSHOT-before/shadow-gradle-plugin-9.0.0-SNAPSHOT.module.asc 9.0.0-SNAPSHOT-after/shadow-gradle-plugin-9.0.0-SNAPSHOT.module.asc
4,6c4,6
< iF4EABYKAAYFAmf8bx0ACgkQAgvaYjxlHg6SwwD/SSR/Srrtbz9Ek/dHClHEEnBg
< aSfbjIiSSR71r/W/8GgBAJboTqQlD6b2FBiai0XCfNXR25FBrM7K5WnPpqG1kiAA
< =o4An
---
> iF4EABYKAAYFAmf8bz0ACgkQAgvaYjxlHg4cJQEAs6zEKb+lE3UAaNFl7AUU/JXQ
> NlC+bPG09XYjCNybihYBAN3yqGF0f+ovVvrGoj30KtLVOSTCv739RTMiCjH3L78P
> =hutz
diff --color=auto -r 9.0.0-SNAPSHOT-before/shadow-gradle-plugin-9.0.0-SNAPSHOT.pom.asc 9.0.0-SNAPSHOT-after/shadow-gradle-plugin-9.0.0-SNAPSHOT.pom.asc
4,6c4,6
< iF4EABYKAAYFAmf8bx0ACgkQAgvaYjxlHg7FgQEA2yjYjY1kaTWmX63FpdDrCOuo
< /skGT4mD/uLdzcbKch0A/1qghoxLl+9ae9+g4oWJW90+ON+4h9yedPUuIsRA68AF
< =Hh8V
---
> iF4EABYKAAYFAmf8bz0ACgkQAgvaYjxlHg5h5QEAoYfAVb4PFuSUytQupxgpOx3H
> zvCcHK0zci8Hf5LTJeYA/ijkM9bpjDTQpfmB8g7Va71ToMPFP+3eaOM3ILFbH0QG
> =eZSN
shadow-gradle-plugin-9.0.0-SNAPSHOT-javadoc.jar.diff.txt
You can repro this issue in https://github.com/GradleUp/shadow, I especially tested it at e817284ca1e95df6f525a1bc652f2ef68f553c52.
Plugin publish plugin did nothing for Dokka, see
We have to call defaultJavaDocOption before GradlePublishPlugin
https://github.com/vanniktech/gradle-maven-publish-plugin/blob/f22bd35c84c3df28700db4ca3de11d5b78a29fde/plugin/src/main/kotlin/com/vanniktech/maven/publish/MavenPublishBaseExtension.kt#L392-L393
or file this issue to plugin-publish side.
The reason why it's not configured right now is that com.gradle.plugin-publish is creating the javadoc jar task. We could still detect that dokka is applied and then configure that dokka's output is used as input for that task.
The Gradle publish plugin does this internally which is hard to override
JavaPluginExtension javaPluginExtension = project.getExtensions().getByType(JavaPluginExtension.class);
javaPluginExtension.withJavadocJar();
There is this pretty old issue on their side https://github.com/gradle/plugin-portal-requests/issues/247. Closing this for now since I don't see much we can do
As java-gradle-plugin applies com.gradle.plugin-publish, I guess we can fix this by replacing
https://github.com/vanniktech/gradle-maven-publish-plugin/blob/b4b02a655660125529d60d93ea3b390858705bae/plugin/src/main/kotlin/com/vanniktech/maven/publish/MavenPublishBaseExtension.kt#L474-L477
with
project.plugins.hasPlugin("com.gradle.plugin-publish") ||
project.plugins.hasPlugin("java-gradle-plugin") ->
configure(GradlePlugin(defaultJavaDocOption(javadocJar, plainJavadocSupported = true), sourcesJar))
EDIT: we can't.
I noticed a workaround for this issue:
afterEvaluate {
tasks.named<Jar>("javadocJar") {
from(tasks.dokkaGeneratePublicationJavadoc)
}
}
See https://github.com/gmazzo/gradle-buildconfig-plugin/blob/05718d048acd733450fb3ed31231bc31a375ebf8/plugin/build.gradle.kts#L112-L116.
Should we patch it from the plugin side?