我想从 java 执行一个 ant 文件。所以我决定使用 Runtime.getRuntime().exec() 来实现这一点。我的 java 文件如下所示,
Process p = Runtime.getRuntime().exec("cmd /c start ant mytarget -Darg1="+arg1+" -Darg2="+arg2+" ", null, new File("E:/ant_demo"));
System.out.println("Ant file executed");
...
...
..
System.out.println("Completed");
我的目标是使用很少的参数运行路径 E:/ant_demo 中可用的 ant 文件。完成 ant 文件后,应执行剩余的代码。
当我运行此代码时,会为 ant 打开一个单独的命令提示符窗口,并且在 ant 文件完成之前,剩余的代码也会并行执行。为了使代码等待 Ant 完成,我将代码更改如下,
Process p = Runtime.getRuntime().exec("cmd /c start /wait ant mytarget -Darg1="+arg1+" -Darg2="+arg2+" ", null, new File("E:/ant_demo"));
p.waitFor();
System.out.println("Ant file executed");
...
...
..
System.out.println("Completed");
进行此更改后,即使 ant 完成,剩余的代码也不会被执行,并且用于 ant 的命令提示符保持打开状态。当我手动关闭用于 ant 的命令提示符时,其余代码将被执行。
如何让ant使用的命令提示符自动关闭?或者如何更改我的代码以运行 ant 文件并在 ant 完成后执行一次剩余的代码?
我尝试了很多方法来实现这一目标,但仍然面临这个问题。
最佳答案
您可以通过调用普通的 Ant 可执行文件来运行 Ant 脚本(ProcessBuilder
可以做到)。 ANT_HOME
环境变量通常指向 Ant 安装,因此您可以从中构建可执行文件的路径:
String antHome = System.getenv().get("ANT_HOME");
String antExecutable = antHome + File.separator + "bin" + File.separator + "ant.bat";
List<String> command = new ArrayList<String>();
command.add(antExecutable);
command.add("mytarget");
command.add("-Darg1="+arg1);
command.add("-Darg2="+arg2);
command.add("-propertyfile");
command.add("myproperty.properties");
ProcessBuilder processBuilder = new ProcessBuilder(command);
processBuilder.directory(new File("E:/ant_demo")); // set working directory
Process process = processBuilder.start(); // run process
// get an input stream connected to the normal output of the process
InputStream inputStream = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line = null;
while (( line = reader.readLine ()) != null) {
System.out.println(line);
}
System.out.println("Ant file executed");
...
...
System.out.println("Completed");
请注意,调用 ProcessBuilder#start()
后,将检索输入流以读取 Ant 命令的输出并将其打印到 System.out
。请参阅Java Process with Input/Output Stream了解更多信息。
关于java - 如何使用 Runtime.getRuntime().exec() 执行 ant 并关闭命令提示符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29899092/