当内部类依赖于R.java时,Gradle在Android Javadocs中排除R.java

知识就是力量,时间就是生命。这篇文章主要讲述当内部类依赖于R.java时,Gradle在Android Javadocs中排除R.java相关的知识,希望能为你提供帮助。
我正在为API构建javaDoc,其中API中的类依赖于R.java。我想构建引用缺少的R.java文件的Javadoc w / o符号错误,即使我设置failOnError false构建成功但我们的Jenkins作业会在成功构建中发生错误时将构建报告为失败。下面的任务将成功创建javadocs,但会在构建期间报告与未找到R.java相关的错误。

android.libraryVariants.all { variant -> def name = variant.name.capitalize()task("generate${name}Doclava", type: Javadoc) {description "Generates Javadoc for $variant.name." source = variant.javaCompile.source title = null // use android.bootClasspath instead of building our own path to android jar //ext.androidJar = "${android.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar" // hardcoded path to generated R.java file to avoid javadoc compile issues ext.R = "build/generated/source/r/minSDK15/release" classpath += project.files(android.sourceSets.main.java.srcDirs, variant.javaCompile.classpath.files, android.bootClasspath) destinationDir = file("${project.docsDir}/${name}/doclava") options { docletpath = configurations.jaxDoclet.files.asType(List) doclet "com.google.doclava.Doclava" bootClasspath new File(System.getenv('JAVA_HOME') + "/jre/lib/rt.jar") addStringOption "XDignore.symbol.file", "-quiet" addStringOption "hdf project.name", "${project.name}" addStringOption "federate android", "http://d.android.com/reference" addStringOption "federationxml android", "http://doclava.googlecode.com/svn/static/api/android-10.xml" addStringOption "federate JDK", "http://download.oracle.com/javase/6/docs/api/index.html?" addStringOption "federationxml JDK", "http://doclava.googlecode.com/svn/static/api/openjdk-6.xml" addStringOption "templatedir", "${project.docsDir}/${name}/doclava/templates" addStringOption "apixml", "${project.docsDir}/${name}/doclava/api-${project.version}.xml" addStringOption "since doclava/since/api-1.0.0.xml", "1.0.0" addStringOption "apiversion", "${project.version}" failOnError false } // exclude generated files exclude '**/BuildConfig.java' exclude '**/R.java' // exclude internal packages exclude '**/internal/**' options.addStringOption "apixml", "${project.docsDir}/${name}/doclava/api-${project.version}.xml" } }

我试过的一些事情:
  • 硬编码生成的R.java文件的路径并添加到类路径。
classpath += project.files(android.sourceSets.main.java.srcDirs, variant.javaCompile.classpath.files, android.bootClasspath, ext.R)
这成功地删除了错误,因此构建成功,但生成的javadoc在javadoc中有到R。* .class的空链接。
  • 从排除列表中删除exclude '**/R.java'行,同时不包括类路径中R.java的路径。
这成功地删除了错误并且构建成功,但生成的javadoc具有到R. * .class文件的链接。
看来exclude语句是从类路径而不是javadoc中排除的。任何深入了解如何生成类依赖于R.java但在javadoc输出中不包含R.java的javadoc将深深体会到。
答案在Android Studio上,转到以下设置(可以通过File > Settings访问设置):
外观与行为> 范围
您应该可以在此处浏览项目文件。现在选择您的文件并使用最右侧的按钮将它们包含/排除到您的范围内(您可以排除或不包括R.java文件和BuildConfig.java文件)。确保勾选底部“共享范围”的复选框,并且您的范围具有令人难忘的名称。
接下来转到Javadoc生成器对话框(Tools > Generate Javadoc)。选择底部单选按钮(“自定义范围”),然后从菜单中选择您之前创建的范围。您可以为Javadoc配置其他设置。
最后单击“确定”,您应该已经生成了Javadoc。
希望这可以解决你的问题。
另一答案我怀疑你试图排除R.java,因为该类中自动生成的javadoc不符合doclint。所以你看到一堆错误和警告,如:
R.java:530: error: unknown tag: colgroup * < colgroup align="left" /> ^

如何删除exclude '**/R.java'并抑制R.java生成的任何错误?
使用this作为基础,然后查看Xdoclint documentation,您应该能够通过添加以下内容来抑制R.java错误:
options.addStringOption('Xdoclint:none R.java', '-quiet')

【当内部类依赖于R.java时,Gradle在Android Javadocs中排除R.java】我测试了这个,它删除了R.java错误。您仍会看到它们打印到控制台,但它不会计入最终的错误编号。

    推荐阅读