我正在使用Gradle Tooling API以编程方式执行构建任务。为此,我使用了BuildLauncher并在其上运行.forTasks(“ clean”)。我想逐行实时打印标准输出和标准错误。
我只能打印整个标准输出,但是只有使用下面的代码完成构建过程后,才能打印。
// connector already created and set up
ProjectConnection connection = connector.connect();
BuildLauncher build = connection.newBuild();
build.forTasks("clean");
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
build.setStandardOutput(outputStream);
build.setStandardError(outputStream);
build.run();
System.out.println(outputStream.toString());
connection.close();
答案 0 :(得分:1)
您可以这样做:
build.setStandardOutput(System.out);
build.setStandardError(System.err);
答案 1 :(得分:0)
我想出了一个解决方案,正在回答我自己的问题,以防有人偶然发现。
关键是在创建新的OutputStream对象时重写write()方法。下面的代码将所有活动内容逐行打印到System.out,但可以轻松更改以打印到GUI,工具窗口(这是我正在做的事情)或其他任何地方。
// connector already created and set up
ProjectConnection connection = connector.connect();
BuildLauncher build = connection.newBuild();
build.forTasks("clean");
OutputStream outputStream = new OutputStream() {
@Override
public void write(int b) throws IOException {
System.out.print((char) b); // or output it to anywhere else you'd like
}
};
build.setStandardOutput(outputStream);
build.setStandardError(outputStream);
build.run();
connection.close();