2015-12-23 8 views
25

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.

  • Entfernen Sie die 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.

    +0

    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

    +0

    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

    +0

    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

    Antwort

    1

    Auf Android-Studio finden Sie auf den folgenden Einstellungen (Einstellungen können über File > Settings zugegriffen werden kann):

    Appearance & Behaviour > Scopes

    sollten Sie in der Lage sein, Ihr Projekt zu durchsuchen Dateien hier. Wählen Sie nun Ihre Dateien aus und verwenden Sie die Schaltflächen ganz rechts, um sie in Ihren Bereich einzuschließen/auszuschließen (Sie können R.java Dateien und BuildConfig.java Dateien ausschließen oder nicht einschließen). Stellen Sie sicher, dass das Kontrollkästchen "Freigabebereich" aktiviert ist und Ihr Bereich einen einprägsamen Namen hat.

    Als nächstes gehen Sie zum Javadoc Generator Dialog (Tools > Generate Javadoc). Wählen Sie den unteren Optionsschalter ("Benutzerdefinierter Bereich") und dann aus dem Menü den Bereich, den Sie zuvor erstellt haben. Es gibt weitere Einstellungen, die Sie für Ihre Javadocs konfigurieren können.

    Klicken Sie abschließend auf "OK", und Sie sollten Javadocs generiert haben.

    Hoffentlich sollte dies Ihr Problem lösen.

    +7

    Sie benötigen eine Gradle-basierte Lösung, da wir keine Javadocs aus Android Studio erstellen. – jdONeill

    0

    Ich vermute, dass Sie versuchen, R.java auszuschließen, da das automatisch generierte Javadoc in dieser Klasse nicht mit Doclint übereinstimmt. So sehen Sie eine Reihe von Fehlern und Warnungen wie:

    R.java:530: error: unknown tag: colgroup 
        * <colgroup align="left" /> 
        ^
    

    Was die exclude '**/R.java' zu entfernen und zu unterdrücken alle von R.java erzeugten Fehler statt?

    Mit this als Basis und dann bei Xdoclint documentation suchen, sollten Sie in der Lage Unterdrückungs R. seinJava-Fehler durch Hinzufügen:

    Ich habe dies getestet und es entfernt die R.java-Fehler. Sie sehen immer noch, dass sie auf die Konsole drucken, aber die endgültigen Fehlernummern werden nicht berücksichtigt.