Gradle:获取 Ant 任务输出
Gradle: Get Ant Task Output
我有一个使用标准输出打印信息的 Ant 任务,我想在 gradle 任务中使用这个输出。我使用以下命令执行 Ant 任务:
tasks.myAntTask.execute()
有人知道如何获取 Ant 输出并将其传递给 gradle 任务吗?
看来 this link 可能会有帮助。更改日志级别以及编写自定义包装器可能正是您所需要的。
Solution
这是一种通过在调用期间注册自定义 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")
我有一个使用标准输出打印信息的 Ant 任务,我想在 gradle 任务中使用这个输出。我使用以下命令执行 Ant 任务:
tasks.myAntTask.execute()
有人知道如何获取 Ant 输出并将其传递给 gradle 任务吗?
看来 this link 可能会有帮助。更改日志级别以及编写自定义包装器可能正是您所需要的。
Solution
这是一种通过在调用期间注册自定义 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")