java - 升级到 Gradle 7 后 Android Gradle Javadoc 损坏

标签 java android gradle javadoc

几天前我升级到了新的 Android Studio 北极狐版本,现在也需要 Gradle 7
在升级之前,我有以下 javadoc 任务,它工作得很好

def javaDocsAllowList = [
    "com/mycompany/SomeFile.java",
    "com/mycompany/OtherFile.java",
    ...
]

task javadocs(type: Javadoc) {
    source android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) + configurations.compile
    include javaDocsAllowList
    destinationDir = file("./docs/javadoc")
}
不过现在,一切都坏了。
第一个错误是Could not get unknown property 'compile' for configuration container of type org.gradle.api.internal.artifacts.configurations.DefaultConfigurationContainer所以我将类路径行更改为:
classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) + configurations.implementation
然后我得到Resolving dependency configuration 'implementation' is not allowed as it is defined as 'canBeResolved=false'.所以我补充说
configurations.implementation.setCanBeResolved(true)
然后我得到一堆错误,它找不到@Nullable 和其他属性的符号。
其他stackoverflow答案建议添加这个,我这样做:
afterEvaluate {
  javadocs.classpath += files(android.libraryVariants.collect { variant ->
    variant.javaCompileProvider.get().classpath.files
  })
}
这修复了解决 @NonNull 等的错误,但现在我留下了一堆错误,JavaDoc 无法解析我自己的代码,例如:void addNotificationsListener(@NonNull NotificationsListener listener); (找不到符号 NotificationsListener)
当我向 AllowList 添加更多文件时,这些似乎减少了,但我明确不想为这些其他文件生成文档。帮助!
为什么 Gradle 7 破坏了所有 JavaDocs,我该如何修复它?
(回顾一下:这是我失败的任务:)
task javadocs(type: Javadoc) {
    source android.sourceSets.main.java.srcDirs
    configurations.implementation.setCanBeResolved(true)

    classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) + configurations.implementation
    include javaDocsAllowList
    destinationDir = file("./docs/javadoc")

    afterEvaluate {
        javadocs.classpath += files(android.libraryVariants.collect { variant ->
            variant.javaCompileProvider.get().classpath.files
        })
    }
}

更新:基于建议的要点 https://gist.github.com/Robyer/a6578e60127418b380ca133a1291f017? ,我将任务更改为以下内容:
task javadocs(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
    android.libraryVariants.all { variant ->
        if (variant.name == 'release') {
            owner.classpath += variant.javaCompileProvider.get().classpath
        }
    }
    include javaDocsAllowList
    destinationDir = file("./docs/javadoc")
}
但是,这没有什么区别;它仍然会出现同样的错误,它无法解析我自己的代码void addNotificationsListener(@NonNull NotificationsListener listener); (找不到符号 NotificationsListener)`

最佳答案

我目前正在使用 gradle 版本 7.0.2 和 Android Studio 北极狐 | 2020.3.1 补丁 2,为了生成 sourcesJar、javadocs 和 javadocJar,我使用:

task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    archiveClassifier.set('sources')
    archivesBaseName ="singleAdapter-1.1.0"
}
task javadoc(type: Javadoc) {
    source = android.sourceSets.main.java.sourceFiles
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
    android.libraryVariants.all { variant ->
        if (variant.name == 'release') {
            owner.classpath += variant.javaCompileProvider.get().classpath
        }
    }
    options.memberLevel = JavadocMemberLevel.PRIVATE
}
task javadocJar(type: Jar, dependsOn: javadoc) {
    archiveClassifier.set('javadoc')
    archivesBaseName = "singleAdapter-1.1.0"
    from javadoc.destinationDir
}
最后,可以在以下位置找到生成的文件:
  • 项目 View -> myModule/build/docs/javadoc - 用于 javadoc
  • 项目 View -> myModule/build/docs/libs - 对于 sourcesJar 和
    javadocJar

  • 我已将其发布在我的 Github Gist 上:Here
    我希望在你的情况下我可以帮助你。

    关于java - 升级到 Gradle 7 后 Android Gradle Javadoc 损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68724523/

    相关文章:

    java - 下载的文件在用户媒体应用程序中不可见?

    java - 使用 split 将 .txt 文件中的信息存储到数组中

    android - 在 Eclipse 中添加应用程序启动快捷方式?

    gradle - 如何使用 Bintray 用户存储库(正确地)作为 gradle 的依赖项?

    java - Gradle 构建因 TransformException 失败

    java - 没有 child 的根元素。日本航空航天局

    java - 为什么服务器套接字要先于客户端套接字打开?

    java - 构建错误 : package android. 应用程序不存在 - 构建认为 Android SDK 未安装? (安卓工作室1.0)

    gradle - 使用 Java 8 运行 Gradle 并使用 fork 编译 Java 13

    java - Play 2.0 Framework模板引擎中的计算