【问题标题】:How to Print Output Stream of Gradle BuildLauncher Live and Line-by-line如何逐行打印 Gradle BuildLauncher 的输出流
【发布时间】:2019-06-12 16:16:39
【问题描述】:

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

【问题讨论】:

    标签: java inputstream outputstream gradle-plugin


    【解决方案1】:

    我想出了一个解决方案,并正在回答我自己的问题,以防有人偶然发现它。

    关键是在创建新的 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();
    

    【讨论】:

      【解决方案2】:

      你可以这样做:

      build.setStandardOutput(System.out);
      build.setStandardError(System.err);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-25
        • 2021-02-18
        • 1970-01-01
        • 2020-06-24
        • 2015-02-27
        相关资源
        最近更新 更多