【发布时间】:2020-03-24 14:07:01
【问题描述】:
我正在运行我的代码;
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>
【问题讨论】:
-
ProcessBuilder.redirectError和ProcessBuilder.redirectOutput应该被使用,然后你可以从中读取...... -
@khmarbaise 好的,我添加了它们,它们现在正在工作。但我真的不明白为什么日志记录解决了我的问题?我不想用它。因为我已经在使用 apache 记录器了。
标签: java windows maven cmd processbuilder