6

我从 gradle 脚本调用 ant.signjar。我怎样才能捕获它的输出?我既没有轻松管理将输出从 INFO 提升到另一个级别,也没有拦截或包装输出到错误警告到 WARN 级别。目前,signjar 回显证书将很快过期,但这并没有显示在 WARN 级别,这不是很好。

4

2 回答 2

2

我假设 Ant 任务正在使用 Ant 的日志框架,而不仅仅是打印到标准输出。在这种情况下,您是否尝试过以下方法?

task taskThatCallsAntTask {
    logging.level = LogLevel.INFO
}

以这种方式配置时,无论调用 Gradle 时设置了哪个日志级别,任务执行时日志级别都会更改为 INFO(并在之后恢复)。请注意,您不能提升 Ant 日志事件的日志级别;这取决于它在哪个级别记录的 Ant 任务。

于 2012-07-12T23:02:12.103 回答
0

这是一个通过在调用期间注册自定义 BuildListener 来捕获 Ant 任务输出的方法。

def captureAntOutput(ant, Closure command) {
    def buffer = new ByteArrayOutputStream()
    def captureStream = new PrintStream(buffer, true, "UTF-8")
    def listener = new org.apache.tools.ant.DefaultLogger(
            errorPrintStream: captureStream,
            outputPrintStream: captureStream,
            messageOutputLevel: org.apache.tools.ant.Project.MSG_INFO
    )

    ant.project.addBuildListener(listener)
    project.configure(ant, command)
    ant.project.removeBuildListener(listener)

    return buffer.toString("UTF-8");
}

示例用法:

String result = captureAntOutput(ant) {
    echo(message: "hello")
}
assert result.contains("hello")
于 2015-02-12T09:14:07.533 回答