Missing: no javadoc jar found in folder解决办法

1,279 阅读2分钟

当我们使用maven库发布项目时,如果publish.gradle未配置javadoc,则在nexus上会出现下图错误:

image.png

我们可以通过content看到,我们的项目中确实没有javadoc.jar,如下图

image.png

其实这个错在sonatype给我们有解释,问题链接地址,如下图:

image.png

我们翻译了一下,大致原因如下:

sonatype强烈建议我们提供 Javadoc 和 Sources ⚓︎

使用 pom 以外的包装的项目必须提供包含 Javadoc 和源代码的 JAR 文件。为的事方便组件的使用者 自动访问 Javadoc 和以及源码,方便代码阅读。

遵循 Maven 存储库格式的这些文件的命名约定使用分类器 javadoc 和源,并将名称与 artifactId 和 version 与打包 jar 组合在一起。例如。与价值观

如果由于某种原因(例如,许可证问题或它是 Scala 项目),您无法提供 -sources.jar 或 -javadoc.jar ,请制作带有简单 README 的假 -sources.jar 或 -javadoc.jar 以通过检查。我们不想禁用这些规则,因为有些人在有选择的情况下倾向于跳过它,我们希望尽可能保持用户体验的质量。

所以我们要做的就是让我们的代码包含javadocresource,接着我们直接看代码:

apply plugin: 'maven-publish'
apply plugin: 'signing'

//将源码打包
task androidSourcesJar(type: Jar) {
    classifier = 'sources'
    exclude "**/R.class"  //排除`R.class`
    exclude "**/BuildConfig.class"  //排除`BuildConfig.class`
}

//将文档打包成jar,因为nexus发布如果不包含javadoc的话是无法发布成功的,具体看:
//https://issues.sonatype.org/browse/OSSRH-52090?jql=text%20~%20%22Missing%3A%20no%20javadoc%20jar%20found%20in%20folder%22
task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
    archiveClassifier.set('javadoc')
}
//...
publishing {
    publications {
        release(MavenPublication) {
           
            // Two artifacts, the `aar` and the sources
            artifact("../plugin/com/eegets/plugin/upload/${PUBLISH_VERSION}/upload-${PUBLISH_VERSION}.jar")
            artifact androidSourcesJar  //将源码打包进aar,如果不需要可以去掉
            artifact androidJavadocsJar //将注释打包进aar,如果不需要可以去掉
        }
    }
}

按照上述方式配置之后我们再次执行打包发布,此时可以看到发布包中已经包含了javadoc包了,如下图:

image.png

到这里,我们再次执行Close发布,等几分钟后再看结果是否成功!

如果对maven打包不理解的地方可以看我之前的一篇文章

Android库发布到Maven Central超详细攻略