如何使gradle构建Javadoc警告失败

我正在使用Java 7(尽管使用1.6编译)来编译类和javadoc。 我已经消除了所有出现的javadoc警告,但是如果有任何javadoc警告,那么想法是让构建失败。

使用Java 8,这是默认行为。 但是,在警告方面它也更加严格(如果方法没有列出所有@params或@returns,我们不希望发出警告)。 另外,我不认为公司很快就会转向8,所以这是一个没有实际意义的问题。

我希望有一些简单的标志设置为gradle失败,如果有警告(只有failonError)。 我在想的是刮掉javadoc进程的控制台输出。 如果该输出包含警告,那么我知道有警告,并且构建应该失败。

这是我的build.gradle中的javadoc块:

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的控制台输出来刮掉它?

注意:我完全取代了原来的答案,因为我发现了一个更好的答案 – 这并不难看:

 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!"); } } } } 

现在不推荐使用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!"); } } } } 

在所有受支持的Java版本上都有一个非标准的隐藏javadoc选项-Xwerror 。 因此你可以简单地做这样的事情:

 if (JavaVersion.current().isJava8Compatible()) { tasks.withType(Javadoc) { // The '-quiet' as second argument is actually a hack, // since the one paramater addStringOption doesn't seem to // work, we extra add '-quiet', which is added anyway by // gradle. See https://github.com/gradle/gradle/issues/2354 // See JDK-8200363 (https://bugs.openjdk.java.net/browse/JDK-8200363) // for information about the -Xwerror option. options.addStringOption('Xwerror', '-quiet') } } 

对于javadoc的官方’-Werror’的function请求被跟踪为JDK-8200363 。