Ich baue JavaDoc für eine API, wobei Klassen in der API von R.java abhängen. Ich möchte die Javadoc ohne Symbolfehler erstellen, die auf die fehlende R.java-Datei verweisen, auch wenn ich failOnError false
den Build erfolgreich gesetzt habe, aber unser Jenkins-Job wird den Build als Fehlgeschlagen melden, wenn Fehler in erfolgreichen Builds auftreten. Die folgende Aufgabe wird die Javadocs erfolgreich erstellen, wird jedoch während des Builds Fehler melden, wenn R.java nicht gefunden wird.Gradle schließt R.java in Android Javadocs aus, wenn interne Klassen von R.java abhängig sind
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"
}
}
Einige Dinge, die ich versucht habe:
- Hard den Pfad zur generierten R.java-Datei und fügen Sie den Classpath.
classpath += project.files(android.sourceSets.main.java.srcDirs, variant.javaCompile.classpath.files, android.bootClasspath, ext.R)
Dies beseitigt erfolgreich die Fehler, so dass die Build erfolgreich, aber die resultierende javadoc leer Links zu R hat. *. Klasse im javadoc.
exclude '**/R.java'
Zeile aus der Ausschlussliste zusammen mit dem Pfad zu R.java im Klassenpfad nicht enthalten.Dies beseitigt erfolgreich die Fehler und der Build ist erfolgreich, aber die resultierende Javadoc hat Links zu R. *. Class-Dateien.
Es scheint, dass die exclude
-Anweisung aus dem Klassenpfad und nicht der Javadoc ausschließt. Jede Einsicht, wie man ein Javadoc erzeugt, in dem Klassen von R.java abhängen, aber R.java in der Javadoc-Ausgabe nicht enthalten, würde sehr geschätzt werden.
Ich habe versucht, den Fehler mit der 'options.addStringOption" Warnung "," 110 "', die nicht funktionierte, zu überschreiben, dann kompilierte die Doclava Jar zu Hardcode in den Wert von 'WARNING' für Fehlercode' 110', die hat auch nicht funktioniert. Scheint, dass der Fehler nicht von Doclava kommt, da es keinen Fehlercode gibt, so dass das Überschreiben nicht funktioniert. 'Fehler: Kann Symbol * R.class' auflösen, wobei ein Doclava-Fehler" Fehler 101: Nicht aufgelöster Link "wäre. – jdONeill
Also was ist das Ziel genau? Worauf möchten Sie die R-Referenzen verlinken? Da der beste Fall, an den ich denken kann, ist, dass wenn Sie die R-Datei einschließen, die Abdeckung abnimmt und Sie R sowieso nicht testen können. Wollen Sie nur, dass die R-Dateiverweise auf den int-Wert der Darstellung aufgelöst werden? Denken Sie mal, welcher Fall warum? Sie werden nie die R-Referenzen erhalten, um den tatsächlichen Wert @ runtime zu zeigen. Also, was ist der Vorteil von include bekommen sie? – JBirdVegas
Wenn Sie sie ausschließen, schlägt die Erstellungsaufgabe fehl. Das Einschließen von ihnen erfüllt die Referenzen, schließt sie jedoch in die Javadoc-Ausgabe ein. Das Ziel besteht darin, die Referenzen für die Build-Task (s) zu erfüllen, aber die Klassen R und BuildConfig aus den generierten Javadocs herauszulassen. Es sollte keine Verweise auf R oder BuildConfig innerhalb der .jar-eingebetteten Javadocs oder im generierten Javadoc-HTML geben. – jneander