我正在使用Java 7(尽管使用1.6编译)来编译类和javadoc。我已经消除了所有出现的javadoc警告,但是如果有任何javadoc警告,那么想法是让构建失败。
使用Java 8,这是默认行为。但是,在警告方面它也更加严格(如果方法没有列出所有@params或@returns,我们不希望发出警告)。另外,我不认为公司很快就会转向8,所以这是一个没有实际意义的点。
如果有警告(只有failonError),我希望有一些简单的标志设置让gradle失败。我在想的是刮掉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的控制台输出来刮掉它?
答案 0 :(得分:5)
注意:我完全取代了原来的答案,因为我找到了一个更好的答案 - 这不是那么难看:
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!");
}
}
}
}
答案 1 :(得分:4)
以下是适用于Gradle&gt; 2.14的解决方案。
char_set = [False for _ in range(128)]
for char in string:
val = ord(char)
if char_set[val]:
# Char already found in string
return False
char_set[val] = True
答案 2 :(得分:4)
所有受支持的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”的功能请求被跟踪为JDK-8200363。
答案 3 :(得分:1)
我只是想跟进此事,因为使用JDK 11和Gradle 5在我的环境中无法接受被接受的答案,这是我用来解决编译警告的一个地方:
import org.gradle.internal.logging.*
import org.gradle.internal.logging.events.*
compileJava {
def outputEvents = []
def listener=new OutputEventListener() {
void onOutput(OutputEvent event) {
outputEvents << event
}
};
doFirst {
gradle.services.get(LoggingOutputInternal).addOutputEventListener(listener)
}
doLast {
gradle.services.get(LoggingOutputInternal).removeOutputEventListener(listener)
outputEvents.each { e ->
if (e.toString() =~ " warning: ") {
throw new GradleException("\n\n\tERROR: You have compilation warnings!\n\n")
}
}
}
}