如何使用 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 跳过自动生成的类的主要内容,如果未能解决你的问题,请参考以下文章
如何使用“api”或“implementation”指令从gradle插件获取依赖项