2015-04-08 4 views
5

Ich verwende Java 7 (obwohl mit 1.6 kompilierend), um Klassen zu kompilieren, und die Javadocs. Ich habe alle Javadoc-Warnungen eliminiert, aber die Idee ist, dass der Build fehlschlägt, wenn Javadoc-Warnungen angezeigt werden.Wie man Mega-Build auf Javadoc-Warnungen ausfällt

Mit Java 8 ist dies das Standardverhalten. ABER, es ist auch viel strenger wenn es um Warnungen geht (wir wollen keine Warnungen, wenn eine Methode nicht alle @params oder @returns auflistet). Außerdem sehe ich nicht, dass das Unternehmen in absehbarer Zeit auf 8 wechselt, also ist das ein strittiger Punkt.

Ich hatte gehofft, dass es einige einfache Flags gibt, die gesetzt werden müssen, damit Graple fehlschlägt, wenn es Warnungen gibt (es gibt nur failonError). Was ich dachte, war, die Konsolenausgabe des Javadoc-Prozesses abzuschaben. Wenn diese Ausgabe WARNUNGEN enthält, weiß ich, dass Warnungen vorhanden sind und der Build fehlschlagen sollte.

Hier ist mein javadoc Block in meinem build.gradle:

task gendocs(type: Javadoc) { 
options.stylesheetFile = new File("./assets/doc_style.css") 
options.windowTitle = "OurTitle" 
options.memberLevel = JavadocMemberLevel.PROTECTED 
options.author = true 
options.linksOffline('http://d.android.com/reference', System.getenv("ANDROID_HOME") + '/docs/reference') 
String v = "${SEMVER}" 
version = v.replace("_", '.') 
destinationDir = new File("${BUNDLE_FOLDER}/docs/api") 
source = sourceSets.main.allJava 
classpath += configurations.compile 
} 

Also, wenn es nicht einen einfacheren Weg, dies zu tun, wie kann ich überprüfen, die Konsolenausgabe von javadoc es zu kratzen?

+0

Vielleicht ist das Problem, dass Sie 'gendocs' Aufgabe konfigurieren, während die Aufgabe, die sie standardmäßig generiert, wenn' java' Plugin verwenden heißt 'javadoc'? – madhead

+0

Hat keinen Unterschied gemacht. Ich habe mich entschieden, nur Checkstyle zu implementieren. –

+0

Fühlen Sie sich frei, eine echte Lösung für diese https://discuss.gradle.org/t/javadoc-fail-on-warning/18141 – tir38

Antwort

3

Anmerkung: Ich habe meine ursprüngliche Antwort völlig ersetzt, weil ich gefunden habe eine bessere - was nicht so hässlich ist:

import org.gradle.logging.internal.OutputEvent 
import org.gradle.logging.internal.OutputEventListener 

     task("javadocCheck",type:Javadoc){ 
      // regular javadoc task configuration 

      def outputEvents = [] 
      def listener=new OutputEventListener(){ 
        void onOutput(OutputEvent event){ 
         outputEvents << event 
        } 
       }; 
      doFirst { 
       getLogging().addOutputEventListener(listener) 
      } 
      doLast { 
       getLogging().removeOutputEventListener(listener) 
       outputEvents.each { e -> 
        if(e.toString() =~ " warning: "){ 
         throw new GradleException("You have some javadoc warnings, please fix them!"); 
        } 
       } 
      } 
     } 
+0

Dank dafür, es funktioniert für das, was ich gerade brauche. –

+0

Ich wollte wirklich, dass dies funktioniert, aber ich habe immer zu viele falsche Positive von anderen "warning" -Strings in meinem Build-Prozess bekommen. – tir38

2

task.getLogging() ist veraltet und LoggingManagerInternal # addOutputEventListener () wurde entfernt.

Hier ist eine Lösung, die mit Gradle> 2.14 funktionieren sollte.