2015-04-08 3 views
5

Я использую Java 7 (хотя компилирую с использованием 1.6) для компиляции классов и javadocs. Я удалил все предупреждения javadoc, которые возникают, но идея состоит в том, чтобы сбой сборки был, если есть какие-либо предупреждения javadoc.Как скомпрометировать построение града на предупреждениях Javadoc

Использование Java 8, это поведение по умолчанию. НО, это также намного более строго, когда дело доходит до предупреждений (мы не хотим предупреждений, если метод не перечисляет все @params или @returns). Кроме того, я не вижу, чтобы компания перешла на 8 в ближайшее время, так что это спорный вопрос.

Я надеялся, что есть некоторый простой флаг, чтобы установить, что градиент не работает, если есть предупреждения (есть только failonError). То, о чем я думал, заключалось в том, чтобы очистить консольный выход процесса javadoc. Если этот вывод содержит ПРЕДУПРЕЖДЕНИЯ, то я знаю, что есть предупреждения, и сборка должна завершиться неудачей.

Вот мой Javadoc блок в моем 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 
} 

Итак, если есть не более простой способ сделать это, как я могу проверить выход консольной Javadoc, чтобы очистить его?

+0

Возможно, проблема заключается в том, что вы настраиваете задачу gendocs, а задача, которая их генерирует по умолчанию при использовании плагина java, называется 'javadoc'? – madhead

+0

Не имеет значения. Я решил просто реализовать checkstyle. –

+0

Не стесняйтесь повышать реальное исправление для этого https://discuss.gradle.org/t/javadoc-fail-on-warning/18141 – tir38

ответ

3

примечание: я уже полностью заменил мой первоначальный ответ, потому что я нашел лучше один - который не является то, что некрасиво:

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

Спасибо за это, он работает на то, что мне нужно прямо сейчас. –

+0

Я действительно хотел, чтобы это работало, но я продолжал получать слишком много ложных срабатываний из других строк «warning:» в моем процессе сборки. – tir38

2

task.getLogging() теперь упразднён и LoggingManagerInternal # addOutputEventListener () удалены.

Вот решение, которое должно работать с 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!"); 
       } 
      } 
     } 
    } 
Смежные вопросы