Java 如何使用Runtime.getRuntime().exec()执行ant并关闭命令提示符
我想从java执行一个ant文件。所以我决定使用Java 如何使用Runtime.getRuntime().exec()执行ant并关闭命令提示符,java,batch-file,command-line,ant,processbuilder,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"); ... .
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\u 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\u 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");
String antHome=System.getenv().get(“ANT_HOME”);
字符串antExecutable=antHome+File.separator+“bin”+File.separator+“ant.bat”;
List命令=new ArrayList();
添加命令(可执行);
添加(“mytarget”);
添加(“-Darg1=“+arg1”);
add(“-Darg2=“+arg2”);
添加(“-propertyfile”);
添加(“myproperty.properties”);
ProcessBuilder ProcessBuilder=新的ProcessBuilder(命令);
processBuilder.directory(新文件(“E:/ant_demo”);//设置工作目录
Process=processBuilder.start();//运行过程
//获取连接到进程正常输出的输入流
InputStream InputStream=process.getInputStream();
BufferedReader reader=新的BufferedReader(新的InputStreamReader(inputStream));
字符串行=null;
而((line=reader.readLine())!=null){
系统输出打印项次(行);
}
System.out.println(“Ant文件已执行”);
...
...
系统输出打印项次(“完成”);
请注意,调用
ProcessBuilder#start()
后,将检索一个输入流,以读取Ant命令的输出并将其打印到System.out
。有关更多信息,请参阅。是否必须调用cmd
窗口?您不能在没有cmd/c…
的情况下执行脚本吗?您好,manouti,我删除了开始选项,但仍然没有执行剩余的代码。@manouti,它不是特定于使用cmd窗口运行的。除了cmd winodw之外,还有其他方法可以使用java运行ant文件吗?如何将propertyfile名称与目标名称一起传递。使用命令提示符,我将执行类似于ant-propertyfile myproperty.properties targetName
的操作。上述代码未加载此属性。如何实现这一点?@Jugi只需通过添加这些选项来更新命令
列表。我添加了command.add(antExecutable)代码>命令。添加(“-propertyfile”)代码>command.add(“myproperty.properties”)代码>命令。添加(“targetName”)代码>。但是它不能正常工作。@Jugi你能用你尝试过的和得到的错误/意外行为来更新吗?我的错,我传递了错误的参数。这是完美的工作,因为我想。非常感谢:)