Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何实时和逐行打印Gradle BuildLauncher的输出流_Java_Inputstream_Outputstream_Gradle Plugin - Fatal编程技术网

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

Java 如何实时和逐行打印Gradle BuildLauncher的输出流,java,inputstream,outputstream,gradle-plugin,Java,Inputstream,Outputstream,Gradle Plugin,我正在使用Gradle工具API以编程方式执行构建任务。为此,我使用BuildLauncher并在其上运行.forTasks(“clean”)。我想逐行实时打印标准输出和标准误差 我已经能够打印出整个标准输出,但是只有在使用下面的代码完成构建过程之后 //连接器已创建和设置 ProjectConnection=connector.connect(); BuildLauncher build=connection.newBuild(); build.forTasks(“clean”); ByteA

我正在使用Gradle工具API以编程方式执行构建任务。为此,我使用BuildLauncher并在其上运行.forTasks(“clean”)。我想逐行实时打印标准输出和标准误差

我已经能够打印出整个标准输出,但是只有在使用下面的代码完成构建过程之后

//连接器已创建和设置
ProjectConnection=connector.connect();
BuildLauncher build=connection.newBuild();
build.forTasks(“clean”);
ByteArrayOutputStream outputStream=新建ByteArrayOutputStream();
build.setStandardOutput(输出流);
build.setStandardError(输出流);
build.run();
System.out.println(outputStream.toString());
connection.close();

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

关键是在创建新的OutputStream对象时重写write()方法。下面的代码将实时打印所有内容,并逐行打印到System.out,但可以轻松更改为打印到GUI、工具窗口(这就是我正在做的)或其他任何地方

//连接器已创建和设置
ProjectConnection=connector.connect();
BuildLauncher build=connection.newBuild();
build.forTasks(“clean”);
OutputStream OutputStream=新的OutputStream(){
@凌驾
公共无效写入(int b)引发IOException{
System.out.print((char)b);//或将其输出到您想要的任何其他位置
}
};
build.setStandardOutput(输出流);
build.setStandardError(输出流);
build.run();
connection.close();

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

关键是在创建新的OutputStream对象时重写write()方法。下面的代码将实时打印所有内容,并逐行打印到System.out,但可以轻松更改为打印到GUI、工具窗口(这就是我正在做的)或其他任何地方

//连接器已创建和设置
ProjectConnection=connector.connect();
BuildLauncher build=connection.newBuild();
build.forTasks(“clean”);
OutputStream OutputStream=新的OutputStream(){
@凌驾
公共无效写入(int b)引发IOException{
System.out.print((char)b);//或将其输出到您想要的任何其他位置
}
};
build.setStandardOutput(输出流);
build.setStandardError(输出流);
build.run();
connection.close();
您只需执行以下操作:

build.setStandardOutput(System.out);
build.setStandardError(System.err);
您只需执行以下操作:

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