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

我正在构build一个API的JavaDoc,其中API中的类依赖于R.java。 我想构build引用缺less的R.java文件的Javadoc w / o符号错误,因为即使当我设置failOnError false ,构build成功,但是当成功的构build中发生错误时,我们的Jenkins作业将报告构build失败。 以下任务将成功创buildjavadoc,但会在构build期间报告与找不到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文件的path并添加到类path中。

classpath += project.files(android.sourceSets.main.java.srcDirs, variant.javaCompile.classpath.files, android.bootClasspath, ext.R)

这成功地删除了错误,所以构build成功,但是生成的javadoc在javadoc中有到R。*。class的空链接。

  • 从排除列表中除去exclude '**/R.java'行,不包括类path中R.java的path。

这成功地删除了错误并且构build成功,但是生成的javadoc已经链接到R。*。class文件。

看来exclude语句是从类path中排除,而不是从javadoc中exclude 。 任何深入了解如何生成一个javadoc,其中类依赖于R.java,但不包括javadoc输出中的R.java将深受赞赏。

Solutions Collecting From Web of "当内部类依赖于R.java时,Gradle在Android Javadoc中排除R.java"

在Android Studio上,转到以下设置(可通过File > Settings访问File > Settings ):

外观与行为>范围

你应该可以在这里浏览你的项目文件。 现在select您的文件,并使用最右边的button来包含/排除它们到您的范围(您可以排除,或不包括R.java文件和BuildConfig.java文件)。 确保勾选了“共享范围”底部的checkbox,并且您的范围具有令人难忘的名称。

接下来转到Javadoc生成器对话框( Tools > Generate Javadoc )。 select底部单选button(“自定义范围”),然后从菜单中select您之前创build的范围。 还有其他的设置可以为你的Javadocsconfiguration。

最后点击“确定”,你应该已经生成了Javadoc。

希望这可以解决你的问题。