如何将Gradle连接到自定义EXE并挂钩其控制台输出?

时间:2015-05-08 08:59:52

标签: c gradle splint

虽然这个问题涉及C语言,Gradle C Plugin和一个名为splint oldschool C静态分析器,但我相信任何Gradle大师都可以回答这个问题。了解如何将Gradle构建连接到可执行流程。

非常简单:我已在本地配置了splint,使用以下命令行分析我的简单C项目的源代码:

splint +never-include -retvalint src/derpus/c/*.c

我正在通过Gradle(C插件)管理我的项目构建,现在想在构建序列中的适当位置调用静态分析(夹板)(无论可能是什么)。

splint输出到控制台,不幸的是没有其他地方。所以我想看看我是否可以"勾选"此控制台输出,检查某些关键字(" 错误"," 警告"等)并失败/停止如果夹板抱怨任何东西的构建。

所以我试图在这里解决几个问题:

  • 如何从Gradle调用夹板,并在适当的阶段?例如,每当CodeNarc执行时(在运行测试之后编译?之后?)很可能应该调用splint。
  • 如何通过此调用将正确的命令行参数传递给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%确信我的workingDircommandLine args是不正确的,我不确定如何从{{1}内部失败/停止构建} -statement,我不确定如何"位置"这个if任务在编译和测试之前发生。

任何想法,Gradle大师?

0 个答案:

没有答案