我正在准备我的Android库并将其上传到Bintray,该过程的一部分运行了以下javadoc任务:
task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
此任务是此处更大的gradle脚本的一部分:https://raw.githubusercontent.com/attwellBrian/JCenter/master/bintrayv1.gradle
当javadoc
任务运行时,会出现以下问题:
在生成Javadocs时,如何纠正这些引用问题?
编辑看起来并不是所有的Android类链接都会产生问题,可能只是来自Android库的类(这也是注释的来源)。是否需要做一些特殊的工作来链接到gradle依赖项中的源文件?
发布于 2016-01-03 01:54:14
还应该将所有依赖项添加到javadoc.classpath中。试试这个:
task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
afterEvaluate {
javadoc.classpath += files(android.libraryVariants.collect { variant ->
variant.javaCompileProvider.get().classpath.files
})
}
发布于 2017-11-19 01:05:13
因此,这些错误意味着JavaDoc无法链接不在同一个模块中的类(没有进一步的配置)。如果你不关心这个的话。拥有指向模块外类的超链接),您可以忽略以下错误
task javadoc(type: Javadoc) {
failOnError false
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
发布于 2022-11-03 22:17:17
我也遇到了同样的问题(不仅是android类,还有androidx类),我无法得到"Patrick“的建议。我在构建脚本时使用kts而不是Groovy,我在将Groovy转换为KTS构建脚本时遇到了问题。我永远无法让javadoc使用android "Tools/Generate“。为了解决这个问题,我所做的就是将我自己的Javadoc任务添加到我的build.gradle.kts脚本文件中。当然,问题是javadoc缺少了一些android类的类路径依赖项。这是爱国者的解决方案想要解决的问题。在我的例子中,我的构建脚本有点不合常规。它们通常不包括一个android块。它们是通过包含一些自定义插件来动态构建的。这可能是Patricks解决方案不适合我的原因;"android“还没有定义。我还有其他一些需求,因为我只想为我的项目中的16个模块中的4个生成Javadoc (这4个模块是我公开的公共API )。这也是我添加自己的javadoc任务的另一个原因。我也不认为Patrick的解决方案解决了androidx类的问题。现在我将解释我的自定义javadoc任务是如何工作的:
我只将定制的javadoc任务添加到根项目模块中。下面是依赖块的样子:
val javadocDeps = configurations.create("javadocDeps")
dependencies {
implementation (libs.androidx.appcompat)
implementation (libs.androidx.fragment)
implementation (libs.androidx.navigation.fragment)
implementation (libs.androidx.navigation.ui)
implementation (libs.androidx.constraintlayout)
implementation(libs.androidx.drawerlayout)
implementation (project(":CoreInterfaces"))
implementation (project(":CoreInternalInterfaces"))
implementation (project(":CoreAndroidInterfaces"))
implementation (project(":CoreAndroidInternalInterfaces"))
implementation (project(":OsgiFrameworkConfiguration"))
implementation (project(":Log"))
implementation (project(":CryptoImpl"))
implementation (project(":SystemProperties"))
implementation (project(":CommunicationImpl"))
implementation (project(":CommunicationAndroidImpl"))
implementation (project(":Executor"))
implementation(project(":OsgiFramework"))
implementation(project(":OsgiInterface"))
implementation(project(":OsgiWrapper"))
implementation(project(":InstallPlanImpl_1_0_0"))
implementation (project(":InstallPlanInterfaces_1_0_0"))
javadocDeps(project(":OsgiFramework"))
javadocDeps (libs.androidx.appcompat)
javadocDeps (libs.androidx.fragment)
javadocDeps (libs.androidx.navigation.fragment)
javadocDeps (libs.androidx.navigation.ui)
javadocDeps (libs.androidx.constraintlayout)
javadocDeps (libs.androidx.drawerlayout)
}
注意,我创建了一个名为"javadocDeps“的配置。
下面是我的定制javadoc任务的定义:
tasks {
register<Javadoc>("createCoreJavadoc") {
setFailOnError(true)
val docDir: File = File(project.projectDir.parentFile.parentFile, "Doc/Core")
println("javadoc destination dir: " + docDir.absolutePath)
setDestinationDir(docDir)
var sourcepaths: FileCollection = project(":CoreInterfaces").files("src/main/java")
sourcepaths =
sourcepaths.plus(project(":CoreInternalInterfaces").files("src/main/java"))
sourcepaths = sourcepaths.plus(project(":CoreAndroidInterfaces").files("src/main/java"))
sourcepaths =
sourcepaths.plus(project(":CoreAndroidInternalInterfaces").files("src/main/java"))
sourcepaths = sourcepaths.plus(project(":OsgiInterface").files("src/main/java"))
sourcepaths =
sourcepaths.plus(project(":InstallPlanInterfaces_1_0_0").files("src/main/java"))
setSource(sourcepaths.asFileTree)
options.overview = "src/main/java/Overview.html"
android.bootClasspath.forEach{
classpath += fileTree(it)
}
val tmpDir:File = File(project.buildDir, "\\tmpAar\\")
if (tmpDir.exists()) tmpDir.delete()
tmpDir.mkdirs()
javadocDeps.forEach {
val zipFileSystem: com.phinneyridge.ZipFileSystem = ZipFileSystem(it.absolutePath,null)
if (it.name.endsWith(".aar")) {
val tmpFile:File = File(tmpDir, it.name.replace(".aar", ".jar"))
zipFileSystem.extractEntry("classes.jar", tmpFile)
} else {
classpath += fileTree(it)
}
}
classpath += fileTree(tmpDir)
//classpath += depCollection
//classpath += javadocDeps
println("classpath: " + classpath.asPath)
}
}
所以你可以看到,1.)我定义了我想为之生成javadoc的模块的源路径,以及2)。添加缺少的android引导类。下一部分可能有点让人困惑。我创建了一个临时目录,并遍历了一组JavaDoc依赖项。如果依赖项是jar文件,我只是将其添加到任务类路径中。如果是aar文件,我从aar文件中提取classes.jar文件,给它一个唯一的名称,并将该文件添加到临时目录中。当这些完成后,我将临时目录添加到类路径中。
这对我有用,我不再得到未定义的android类和androidx类。注意,我必须特别处理aar文件。javadoc任务不知道如何直接处理aar文件。
https://stackoverflow.com/questions/34571371
复制相似问题