简体   繁体   English

如何在 Gradle Javadoc 任务中提供生成的数据绑定类?

[英]How to provide generated data-binding classes in a Gradle Javadoc task?

With this Gradle task I've used to extract AAR, in order to generate Javadoc:通过这个 Gradle 任务,我用来提取 AAR,以生成 Javadoc:

task javadoc(type: Javadoc) {
    doFirst {
        configurations.implementation.filter { it.name.endsWith('.aar') }.each { aar ->
            copy {
                from zipTree(aar)
                include "**/classes.jar"
                into "$buildDir/tmp/aarsToJars/${aar.name.replace('.aar', '')}/"
            }
        }
    }
    failOnError false
    options.linkSource true
    options.links("https://docs.oracle.com/en/java/javase/11/docs/api/")
    options.links("https://developer.android.com/reference/")
    title = "Colorpicker Library ${versionName} API"
    source = android.sourceSets.main.java.srcDirs
    classpath = files(new File("${android.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar"))
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
    classpath += fileTree(dir: "$buildDir/tmp/aarsToJars/")
    configurations.implementation.setCanBeResolved(true)
    classpath += configurations.implementation
    destinationDir = file("${project.buildDir}/outputs/javadoc/")
    exclude "**/BuildConfig.java"
    exclude "**/R.java"
}

It fails since I've enabled androidx.databinding 7.2.1 inside the library module:它失败了,因为我在库模块中启用androidx.databinding 7.2.1

> Task :library:javadoc
...\ColorPickerDialogFragment.java:24: error: package com.acme.databinding does not exist
import com.acme.databinding.DialogColorPickerBinding;
                                          ^
...\ColorPickerDialogFragment.java:46: error: cannot find symbol
    DialogColorPickerBinding mDataBinding;
    ^
  symbol:   class DialogColorPickerBinding
  location: class ColorPickerDialogFragment
2 errors

How can I add these generated sources to classpath ?如何将这些生成的源添加到classpath Ignoring the class import doesn't seem to be an option.忽略类import似乎不是一种选择。 Or does javadoc have to depend on the task, which generates these (bad timing)?或者javadoc是否必须依赖于生成这些(时间错误)的任务? In general, exclude "**/ColorPickerDialogFragment.java" is not the answer I'm looking for.一般来说, exclude "**/ColorPickerDialogFragment.java"不是我正在寻找的答案。

Extracting the built AAR and putting it on classpath provides the generated classes -提取构建的 AAR 并将其放在classpath中提供生成的类 -
but it's a whole lot more elegant to reference the intermediate classes.jar already:但是已经引用了中间classes.jar更加优雅:

task javadoc(type: Javadoc) {

    ...
    doFirst {

        ...
        def aar_main = new File("$buildDir/intermediates/aar_main_jar")
        if (aar_main.exists()) {
            copy {
                from aar_main
                include "**/classes.jar"
                into "$buildDir/tmp/aarsToJars/aar_main_jar/"
            }
        }
    }
}

One can also check .exists() before already:也可以在之前检查.exists()

javadoc.onlyIf {
    new File("$buildDir/intermediates/aar_main_jar").exists()
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM