vanniktech / gradle-maven-publish-plugin

A Gradle plugin that publishes your Android and Kotlin libraries, including sources and javadoc, to Maven Central or any other Nexus instance.
https://vanniktech.github.io/gradle-maven-publish-plugin
Apache License 2.0
1.45k stars 127 forks source link

Javadoc jar is empty when applying Kotlin, Dokka, and pluginPublish plugins #926

Open Goooler opened 1 month ago

Goooler commented 1 month ago

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 diff --color=auto -r 9.0.0-SNAPSHOT-before/maven-metadata-local.xml 9.0.0-SNAPSHOT-after/maven-metadata-local.xml 6c6 < 20250414021245 --- > 20250414021317 12c12,13 < jar --- > sources > jar.asc 14c15 < 20250414021245 --- > 20250414021317 17c18 < jar.asc --- > jar 19c20 < 20250414021245 --- > 20250414021317 22,23c23 < javadoc < jar.asc --- > pom 25c25 < 20250414021245 --- > 20250414021317 29c29 < jar.asc --- > jar 31c31 < 20250414021245 --- > 20250414021317 36c36 < 20250414021245 --- > 20250414021317 39c39,40 < pom --- > javadoc > jar.asc 41c42 < 20250414021245 --- > 20250414021317 47c48 < 20250414021245 --- > 20250414021317 50,51c51 < sources < jar --- > pom.asc 53c53 < 20250414021245 --- > 20250414021317 56c56 < pom.asc --- > module.asc 58c58 < 20250414021245 --- > 20250414021317 61c61 < module.asc --- > jar.asc 63c63 < 20250414021245 --- > 20250414021317 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.

Goooler commented 1 month ago

Plugin publish plugin did nothing for Dokka, see

Image

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.

gabrielittner commented 4 weeks ago

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.