2015-04-08 13 views
5

Sto usando Java 7 (sebbene compili usando 1.6) per compilare classi e javadocs. Ho eliminato tutti gli avvisi javadoc che si presentano, ma l'idea è di far fallire la build se ci sono degli avvisi javadoc.Come eseguire il fail gradle build su Javadoc warnings

Utilizzo di Java 8, questo è il comportamento predefinito. MA, è anche molto più severo quando si tratta di avvertimenti (non vogliamo avvisi se un metodo non elenca tutti @params o @returns). Inoltre, non vedo l'azienda spostarsi a 8 in qualsiasi momento presto, quindi è un punto controverso.

Speravo ci fosse un semplice flag da impostare per avere gradle fail se ci sono avvisi (c'è solo failonError). Quello che stavo pensando, era quello di raschiare l'output della console del processo javadoc. Se quell'output contiene WARNINGS, so che ci sono avvertimenti e la build dovrebbe fallire.

Ecco il mio blocco javadoc nel mio 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 
} 

Quindi, se non c'è un modo più semplice per fare questo, come faccio a controllare l'output della console di javadoc per raschiare esso?

+0

Forse il problema è che si sta configurando il task 'gendocs', mentre l'attività che li genera di default quando si usa il plugin' java' si chiama 'javadoc'? – madhead

+0

Non ha fatto la differenza. Ho deciso di implementare il checkstyle. –

+0

Sentiti libero di sviare una vera soluzione per questo https://discuss.gradle.org/t/javadoc-fail-on-warning/18141 – tir38

risposta

3

nota: Ho totalmente sostituito la mia risposta originale, perché ho trovato uno migliore - che non è quella brutta:

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

Grazie per questo, sta funzionando per ciò di cui ho bisogno in questo momento. –

+0

Volevo davvero che funzionasse, ma continuavo a ricevere troppi falsi positivi da altre "avvertenze:" stringhe nel mio processo di compilazione. – tir38

2

task.getLogging() è ora deprecato e LoggingManagerInternal # addOutputEventListener () è stato rimosso.

Ecco una soluzione che dovrebbe funzionare con Gradle> 2.14.

import org.gradle.api.logging.StandardOutputListener 

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

     def capturedOutput = [] 
     def listener = { capturedOutput << it } as StandardOutputListener 
     doFirst { 
      logging.addStandardErrorListener(listener) 
      logging.addStandardOutputListener(listener) 
     } 
     doLast { 
      logging.removeStandardOutputListener(listener) 
      logging.removeStandardErrorListener(listener) 
      capturedOutput.each { e -> 
       if(e.toString() =~ " warning: ") { 
        throw new GradleException("You have some javadoc warnings, please fix them!"); 
       } 
      } 
     } 
    } 
Problemi correlati