如何使用 gradle 从 Javadoc 跳过自动生成的类

Posted

技术标签:

【中文标题】如何使用 gradle 从 Javadoc 跳过自动生成的类【英文标题】:How to skip autogenerated classes from Javadoc using gradle 【发布时间】:2021-04-26 18:22:27 【问题描述】:

在一个 android 库项目中,我使用 Gradle 脚本生成 Javadocs:

task androidJavadocs(type: Exec, dependsOn: buildJavadocsClasspath) 
  doFirst 

    executable = 'javadoc'

    args = [
        '-classpath', javadocsClasspath,
        '-sourcepath', './src/main/java',
        '-subpackages', 'com.example.myproject',
        '-d', javadocsDestinationDir,
        '-exclude', 'com.example.myproject.internal',
        '-doctitle', project.getName() + " " + VERSION_NAME + " API",
        '-windowtitle', POM_NAME + " API",
        '-link', "http://docs.oracle.com/javase/8/docs/api/",
        '-Xdoclint:none',
        '-quiet'
    ]
  

问题在于,在为引用自动生成的类(如 BuildConfig 或 DaggerMyClientComponent)的类生成 javadoc 时,Javadoc 返回警告 (Java 8) 或错误 (Java 11)

./src/main/java/com/example/myproject/MyClient.java:13: error: cannot find symbol
import com.example.myproject.internal.DaggerMyClientComponent;
                                              ^
  symbol:   class DaggerMyClientComponent
  location: package com.example.myproject.internal
./src/main/java/com/example/myproject/internal/storage/client/SdkVersionStorage.java:9: error: cannot find symbol
import com.example.myproject.BuildConfig;
                                     ^
  symbol:   class BuildConfig
  location: package com.example.myproject
./src/main/java/com/example/myproject/internal/utils/UserAgentHeader.java:8: error: cannot find symbol
import com.example.myproject.BuildConfig;
                                     ^
  symbol:   class BuildConfig
  location: package com.example.myproject

我不明白的一件事是,两个错误来自已经使用“exclude”参数从 javadoc 中排除的内部类。

除此之外,我看不到修复或抑制这些错误的选项。添加 com.example.myproject.internal.DaggerMyClientComponent 之类的排除规则不起作用。

使用 Android Studio 生成 Javadocs 不是一个选项,我需要使用可以在 CI (Bitrise) 中使用的脚本。

【问题讨论】:

你有什么运气吗?我正在遭受完全相同的问题。由于排除我的内部包裹而收到错误 【参考方案1】:

你有两种方法解决这个问题:

选项 1

在 javadoc 命令中添加--ignore-source-errors(我从this other answer 中采用了这种方法)

对于那些使用 javadoc gradle 任务的人,他们可以这样添加:

options.addBooleanOption('-ignore-source-errors', true)

选项 2

或者将 BuildConfig.java 文件的路径添加到 sourcepath 中(以备不时之需)

对于使用 javadoc gradle 任务的人,请将其添加到 source 属性中:

source = android.sourceSets.main.java.source + file('build/generated/source/buildConfig/release/your/package/BuildConfig.java').path

【讨论】:

以上是关于如何使用 gradle 从 Javadoc 跳过自动生成的类的主要内容,如果未能解决你的问题,请参考以下文章

Laravel phpunit 跳过自定义测试文件

如何使用“api”或“implementation”指令从gradle插件获取依赖项

如何使用 puml 图生成 javadoc?

Android Studio 中的 Javadoc @link 引用到 build.gradle

maven项目打包和编译跳过单元测试和javadoc

如何使用 JDK 11 在 Android 项目中生成 javadoc