如何实时和逐行打印Gradle BuildLauncher的输出流

时间:2019-06-12 16:16:39

标签: java inputstream outputstream gradle-plugin

我正在使用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();

2 个答案:

答案 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();