Gradle excluye R.java en Javadocs de Android cuando las clases internas dependen de R.java
android-gradle doclet (2)
Estoy creando JavaDoc para una API en la que las clases de la API dependen de R.java. Quiero compilar los errores del símbolo Javadoc w / o que hacen referencia al archivo R.java faltante, ya que incluso cuando configuro failOnError false
la compilación se realiza correctamente, pero nuestro trabajo Jenkins informará que la compilación falló cuando se producen errores en las compilaciones correctas. La tarea siguiente creará con éxito los javadocs pero informará los errores durante la compilación relacionados con no encontrar 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"
}
}
Algunas cosas que he intentado:
- Codifique la ruta del archivo R.java generado y agregue a la ruta de clase.
classpath += project.files(android.sourceSets.main.java.srcDirs, variant.javaCompile.classpath.files, android.bootClasspath, ext.R)
Esto elimina con éxito los errores para que la compilación tenga éxito, pero el javadoc resultante tiene enlaces vacíos a la clase R. *. En el javadoc.
- Elimine la línea de
exclude ''**/R.java''
de la lista de exclusión y no incluya la ruta a R.java en la ruta de clase.
Esto elimina con éxito los errores y la compilación se realiza correctamente, pero el javadoc resultante tiene enlaces a archivos de clase R. *.
Parece que la sentencia exclude
se excluye de la ruta de clase y no del javadoc. Cualquier información sobre cómo generar un javadoc donde las clases dependen de R.java pero no incluyen R.java en la salida de javadoc sería muy apreciada.
En Android Studio, vaya a la siguiente configuración (se puede acceder a la configuración a través de File > Settings
):
Apariencia y Comportamiento> Alcances
Debes poder navegar por los archivos de tu proyecto aquí. Ahora seleccione sus archivos y use los botones en el extremo derecho para incluirlos / excluirlos de su alcance (puede excluir o no incluir los archivos BuildConfig.java
y BuildConfig.java
). Asegúrese de que la casilla en la parte inferior "Compartir alcance" esté marcada, y su alcance tenga un nombre memorable.
A continuación, vaya al cuadro de diálogo del generador Javadoc ( Tools > Generate Javadoc
). Seleccione el botón de opción inferior ("Alcance personalizado") y luego del menú, seleccione el alcance que creó anteriormente. Hay otras configuraciones que puedes configurar para tus Javadocs.
Finalmente haga clic en ''Aceptar'', y debería haber generado Javadocs.
Esperemos que esto resuelva tu problema.
Sospecho que está intentando excluir R.java porque el javadoc generado automáticamente en esa clase no se ajusta a doclint. Así que estás viendo un montón de errores y advertencias como:
R.java:530: error: unknown tag: colgroup
* <colgroup align="left" />
^
¿Qué exclude ''**/R.java''
con la eliminación de la exclude ''**/R.java''
y la exclude ''**/R.java''
cualquier error generado por R.java en su lugar?
Usando this como base, y luego mirando la documentación de Xdoclint , debería poder suprimir los errores de R.java agregando:
options.addStringOption(''Xdoclint:none R.java'', ''-quiet'')
He probado esto y elimina los errores de R.java. Aún los verá imprimiéndose en la consola, pero no contarán en los números de error finales.