【问题标题】:Gradle, Javadoc and Android documentationGradle、Javadoc 和 Android 文档
【发布时间】:2014-06-11 10:19:34
【问题描述】:

我现在将 Gradle 用于我的所有项目,甚至用于生成 javadoc。

android.libraryVariants.all { variant ->

    task("generate${variant.name}Javadoc", type: Javadoc) {
        title = "$name $version API"
        source = variant.javaCompile.source
        ext.androidJar = "${android.plugin.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar"
        ext.googlePlayServicesJar = "${android.plugin.sdkDirectory}/extras/google/google_play_services/libproject/google-play-services_lib/libs/google-play-services.jar"
        classpath = files(variant.javaCompile.classpath.files, ext.androidJar, ext.googlePlayServicesJar)
        options.links("http://docs.oracle.com/javase/7/docs/api/");
        options.links("http://d.android.com/reference/");
        //options.linksOffline("http://d.android.com/reference", "${android.plugin.sdkDirectory}/docs/reference");
        exclude '**/BuildConfig.java'
        exclude '**/R.java'
    }

}

使用该代码,我得到了一切工作,除了一件事:常规的 Android API 对象,如 Activity、Bitmap 等。 Java 的链接工作正常。

最终生成的文档没有链接http://d.android.com/reference。 我尝试了 options.links() 和 options.linksOffline() 都没有成功。

编辑

感谢@ejb,问题是您不能同时提供多个options.links()。 所以我将options.links() 用于Java 的文档和options.linksOffline() 用于Android 的文档:

options {
    links("http://docs.oracle.com/javase/7/docs/api/");
    linksOffline("http://d.android.com/reference", "${android.plugin.sdkDirectory}/docs/reference");
    //stylesheetFile = new File(projectDir, "stylesheet.css");
}

【问题讨论】:

    标签: android javadoc android-gradle-plugin


    【解决方案1】:

    我能够使用以下 sn-p 成功链接到 http://d.android.com/reference 这在功能上正是您所拥有的(据我所知)。

     android.libraryVariants.all { variant -> 
       task("generate${variant.name.capitalize()}Javadoc", type: Javadoc) {
         // title = ''
         // description = ''
         source = variant.javaCompile.source 
         classpath = files(variant.javaCompile.classpath.files, project.android.getBootClasspath()) 
         options { 
           links "http://docs.oracle.com/javase/7/docs/api/" 
           linksOffline "http://d.android.com/reference","${android.sdkDirectory}/docs/reference" 
         } 
         exclude '**/BuildConfig.java' 
         exclude '**/R.java' 
       } 
     }
    

    所以这里还有其他问题。

    您必须离线构建 javadoc,因为在 Web 服务的路径上似乎没有 package-list 可用。也许仔细检查您是否确实在本地加载了文档,并确保在 /[android-sdk]/docs/reference 目录中有一个 package-list

    如果你还是不明白,也许你可以发布输出。

    您可能检查的另一件事是./build/tmp/[taskname]/javadoc.optionsheadhead的上述文件应显示仔细设置适当的选项。要检查的内容包括在 -classpath 中正确包含 android.jar 以及是否存在带有预期参数的 linksOffline:-linksoffline extDocURL packageListLoc

    javadoc.options 应该有两个选项,只有各自的参数:

    -linksoffline 'http://d.android.come/reference' '[sdkDir]/docs/reference'
    -links 'http://docs.oracle.com/javase/7/docs/api/' 
    

    编辑android.getBootClasspath() 更好,感谢 P-chan。

    【讨论】:

    • package-list 存在,[android-sdk]/docs/reference 存在,build/tmp/generatereleaseJavadoc/javadoc.options 确实包含 -link 'http://d.android.com/reference/' 等。我还尝试了您的确切 Gradle 任务......没有任何变化:(
    • 使用此任务对我有用。我只需要将android.plugin.sdkDirectory 更改为android.sdkDirectory
    • @shkschneider - javadoc.options 应该包含-linksoffline http://d.android.com/reference [sdkdir]/docs/reference,而不仅仅是-links http://d.android.com/reference
    • @shkschneider 您可以在 pastebin 上发布 head javadoc.options 或作为要点吗? http://d.android.com/reference 不应包含在 -links 选项中。 -links 应该只有 Oracle javadoc 链接...
    • android.getBootClasspath() 也可以用来获取android.jar的位置,比较简单。然后你会做:classpath = files(variant.javaCompile.classpath.files, project.android.getBootClasspath())
    【解决方案2】:

    对于 Android Gradle 插件 1.1.2+ (com.android.tools.build:gradle:1.1.+)

    libraryVariants - 不再工作了

    使用:

    task javadoc(type: Javadoc) {
        source = android.sourceSets.main.java.srcDirs
        classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
        destinationDir = file("../javadoc/")
        failOnError false
    }
    

    destinationDir = file("../javadoc/") - 将 javadocs 定位到项目目录的根目录(这样 jenkins javadoc 插件可以找到它并显示在特殊的文档面板中)

    failOnError false - 用于抑制可能导致 jenkins 构建失败的警告


    Gradle JavaDocs 的替代方案

    Doxygen - 交叉参考文档工具。

    可以从 UI 或终端运行:http://www.doxygen.nl/manual/doxygen_usage.html


    生成 javadoc 可用 throw java 工具:'javadoc'

    从命令行运行:

    javadoc -d docs -sourcepath app/src/main/java -subpackages com
    

    docs - 目标文件夹

    【讨论】:

    • libraryVariants 从 Gradle 1.1.0 起仍然适用于我,并且您的代码仅适用于 Gradle 1.1.2+,因为 code.google.com/p/android/issues/detail?id=152811 但感谢您的更新
    • 这对我来说很好。虽然我在设置类路径的行之前添加了额外的行classpath += configurations.compile。如果没有这个,它将无法从我的项目中的 JAR 库中找到方法。
    猜你喜欢
    • 2018-12-10
    • 2015-06-22
    • 2018-04-03
    • 2016-11-03
    • 1970-01-01
    • 2012-01-19
    • 1970-01-01
    • 2010-10-08
    • 2019-05-25
    相关资源
    最近更新 更多