Ori*_*rds 6 java android javadoc gradle
几天前,我升级到了新的 Android Studio Arctic Fox 版本,现在也需要 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")
}
Run Code Online (Sandbox Code Playgroud)
然而现在,一切都破碎了。
第一个错误是
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
Run Code Online (Sandbox Code Playgroud)
然后我得到
Resolving dependency configuration 'implementation' is not allowed as it is defined as 'canBeResolved=false'.
所以我添加
configurations.implementation.setCanBeResolved(true)
Run Code Online (Sandbox Code Playgroud)
然后我收到一堆错误,它找不到 @Nullable 和其他属性的符号。
其他 stackoverflow 答案建议添加此内容,我这样做:
afterEvaluate {
javadocs.classpath += files(android.libraryVariants.collect { variant ->
variant.javaCompileProvider.get().classpath.files
})
}
Run Code Online (Sandbox Code Playgroud)
这修复了解析 @NonNull 等的错误,但现在我留下了一堆 JavaDoc 无法解析我自己的代码的错误,例如:
void addNotificationsListener(@NonNull NotificationsListener listener);(找不到符号NotificationsListener)
当我向允许列表中添加更多文件时,这些似乎会减少,但我明确不想为这些其他文件生成文档。帮助!
为什么 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
})
}
}
Run Code Online (Sandbox Code Playgroud)
更新:基于建议的要点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")
}
Run Code Online (Sandbox Code Playgroud)
然而这没有什么区别;它仍然遇到相同的错误,无法解析我自己的代码
void addNotificationsListener(@NonNull NotificationsListener listener);(找不到符号NotificationsListener)`
小智 2
我目前使用的是 gradle 版本 7.0.2 和 Android Studio Arctic Fox | 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
}
Run Code Online (Sandbox Code Playgroud)
最后,生成的文件可以在以下位置找到:
我已将其发布在我的 Github Gist 上:这里
我希望在你的情况下我可以帮助你。