带有 ProcessBuilder 的 Maven exec 停止处理
Maven exec with ProcessBuilder stops processing
我运行将我的代码设置为;
mvn exec:java@xxxxxxxxxxxx -Dexec.args="hello"
我不知道为什么,但它以某种方式停止处理。它在 10 或 20 秒后卡住。但这发生在 ProcessBuilder 上;
我是这样运行的:
public static long runCommandLine(String commandLineArgs){
try {
ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", commandLineArgs);
Process process = pb.start();
if(!commandLineArgs.contains("runner")) {
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
while ((reader.readLine()) != null) { /*haha*/}
process.waitFor();
}
return process.pid();
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
我将 .bat 文件的路径作为参数 (String commandLineArgs) 发送到该方法;
.bat 文件包含行:
cd C:/xxxx/%username%/xxx
mvn exec:java@xxxxxxxxxxxx -Dexec.args="hello"
如果我手动 运行 .bat 文件,一切正常。但是使用 ProcessBuilder 会在一段时间后卡住。
pom.xml 配置:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<executions>
<execution>
<id>xxxxxxxx</id>
<configuration>
<mainClass>xxxxxxxxxxx</mainClass>
</configuration>
</execution>
</executions>
</plugin>
如 khmarbaise 所述"ProcessBuilder.redirectError and ProcessBuilder.redirectOutput should be used and afterwards you can read from it...",解决方案是添加重定向。
进程在 ProcessBuilder.start() 之后明显暂停一段时间的原因通常与您的应用程序在生成时未使用 stdout 和 stderr 流有关。因此,如果没有按照建议调用 redirectError/redirectOutput(File),只需设置一个 Runnable/Thread 来同时使用 getInputStream / getErrorStream.
我运行将我的代码设置为;
mvn exec:java@xxxxxxxxxxxx -Dexec.args="hello"
我不知道为什么,但它以某种方式停止处理。它在 10 或 20 秒后卡住。但这发生在 ProcessBuilder 上;
我是这样运行的:
public static long runCommandLine(String commandLineArgs){
try {
ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", commandLineArgs);
Process process = pb.start();
if(!commandLineArgs.contains("runner")) {
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
while ((reader.readLine()) != null) { /*haha*/}
process.waitFor();
}
return process.pid();
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
我将 .bat 文件的路径作为参数 (String commandLineArgs) 发送到该方法;
.bat 文件包含行:
cd C:/xxxx/%username%/xxx
mvn exec:java@xxxxxxxxxxxx -Dexec.args="hello"
如果我手动 运行 .bat 文件,一切正常。但是使用 ProcessBuilder 会在一段时间后卡住。
pom.xml 配置:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<executions>
<execution>
<id>xxxxxxxx</id>
<configuration>
<mainClass>xxxxxxxxxxx</mainClass>
</configuration>
</execution>
</executions>
</plugin>
如 khmarbaise 所述"ProcessBuilder.redirectError and ProcessBuilder.redirectOutput should be used and afterwards you can read from it...",解决方案是添加重定向。
进程在 ProcessBuilder.start() 之后明显暂停一段时间的原因通常与您的应用程序在生成时未使用 stdout 和 stderr 流有关。因此,如果没有按照建议调用 redirectError/redirectOutput(File),只需设置一个 Runnable/Thread 来同时使用 getInputStream / getErrorStream.