几天前我升级到了新的 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
}
最后,可以在以下位置找到生成的文件:javadocJar
我已将其发布在我的 Github Gist 上:Here
我希望在你的情况下我可以帮助你。
关于java - 升级到 Gradle 7 后 Android Gradle Javadoc 损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68724523/