虽然这个问题涉及C语言,Gradle C Plugin和一个名为splint的 oldschool C静态分析器,但我相信任何Gradle大师都可以回答这个问题。了解如何将Gradle构建连接到可执行流程。
非常简单:我已在本地配置了splint,使用以下命令行分析我的简单C项目的源代码:
splint +never-include -retvalint src/derpus/c/*.c
我正在通过Gradle(C插件)管理我的项目构建,现在想在构建序列中的适当位置调用静态分析(夹板)(无论可能是什么)。
splint输出到控制台,不幸的是没有其他地方。所以我想看看我是否可以"勾选"此控制台输出,检查某些关键字(" 错误"," 警告"等)并失败/停止如果夹板抱怨任何东西的构建。
所以我试图在这里解决几个问题:
到目前为止,我最好的尝试是:
task check(type:Exec) {
commandLine 'cmd', '/c', 'C:/splint-3.1.1/bin/splint.exe', '+never-include', '-retvalint', 'src/derpus/c/*.c'
standardOutput = new ByteArrayOutputStream()
doLast {
String output = standardOutput.toString()
if(output.contains("error") || output.contains("")) {
println "Chuggington!"
} else {
println "Meeska! Mooseka! Mickey Mouse! Output is: ${output}"
}
}
}
这会产生:
Defining custom ▒check▒ task is deprecated when using standard lifecycle plugin has been deprecated and is scheduled to be removed in Gradle 3.0
:checkSplint 3.1.1 --- 12 April 2003
Finished checking --- no warnings
Chuggington!
BUILD SUCCESSFUL
Total time: 3.327 secs
但是,我100%确信我的workingDir
和commandLine
args是不正确的,我不确定如何从{{1}内部失败/停止构建} -statement,我不确定如何"位置"这个if
任务在编译和测试之前发生。
任何想法,Gradle大师?