2015-03-31 125 views
0

我正在编写Java RCP应用程序,其中我从用户输入文件路径为ANT_HOME,然后评估版本以进行验证。 然而,当我设置ANT_HOME属性为系统属性,评估,因为ant.bat脚本包含覆盖命令行中的ANT_HOME属性

rem %~dp0 is expanded pathname of the current script under NT 
set DEFAULT_ANT_HOME=%~dp0.. 

if "%ANT_HOME%"=="" set ANT_HOME=%DEFAULT_ANT_HOME% 

我并不需要更新我的ANT_HOME但需要重写值,以便用户输入的路径可以是失败评估我的应用程序的有效/无效ant版本。

即使在使用我的命令行时也会出现此问题。看下面的截图。

C:\Users\tunnikrishnan>echo %ANT_HOME% 
E:\tools\apache-ant-1.8.4 

C:\Users\tunnikrishnan>E:\tools\apache-ant-1.6.5\bin\ant.bat -version 
Apache Ant(TM) version 1.8.4 compiled on May 22 2012 
C:\Users\tunnikrishnan> 

有人可以指导我如何才能解决这个问题?

+0

为什么不改变你的验证来检查%ANT_HOME%/ bin/ant.bat的_existence_而不是执行它以获取版本? – sudocode 2015-03-31 09:33:14

+0

@sudocode我不需要更新我的ANT_HOME,但需要覆盖该值,以便可以从我的应用程序对用户输入的路径进行有效/无效的Ant版本评估。 – 2015-03-31 14:31:44

回答

0

更改ProcessBuilder实例的环境变量。

ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2"); 
Map<String, String> env = pb.environment(); 
env.put("ANT_HOME", getUserAntHome()); 
pb.redirectErrorStream(true); 
Process p = pb.start(); 

其中getUserAntHome()从用户输入中获得价值。