java - 如何使用 Runtime.getRuntime().exec() 执行 ant 并关闭命令提示符

标签 java batch-file command-line ant processbuilder

我想从 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/

相关文章:

windows - 如何使用 CMD/Powershell 查找目录(包括子目录)中的所有文件,然后显示具有特定扩展名的文件

Bash 脚本打印命令,但不打印 echo 命令

java - 带蓝图的 Camel 代理

java - 在 while 循环中验证 isDisplayed() WebElement 属性

java - 通过java运行批处理文件(.bat)所需的解决方案

ssl - 从命令行添加 firefox 证书

python os.system命令行将值返回给python

java - 为什么 Vaadin 8 ComboBox 添加额外的空项目

java - 如何解决这个hibernate运行时异常?

php - 从php以特定用户身份执行bat文件