Apache Ant在运行此脚本时被冻结

我想从ant脚本中显示一个密码输入对话框。 这是我在build.xml中的代码:

  importClass(javax.swing.JPasswordField); importClass(javax.swing.JOptionPane); var pf = new JPasswordField(); var okCxl = JOptionPane.showConfirmDialog(null, pf, "Enter Password", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); if (okCxl == JOptionPane.OK_OPTION) { project.setNewProperty("keypass", pf.getPassword()); } else { throw "Password is required"; }   ...  

这段代码永远挂起。 怎么了?

更新:我正在使用Mac OS X 10.8.2和Oracle JDK 7u13进行测试

它在Eclipse Juno Release Build id:20120614-1722和Windows XP下的JDK 7中运行良好:

 Buildfile: D:\...\build.xml sign: [echo] [C@ea1569 BUILD SUCCESSFUL Total time: 7 seconds 

它在Run.bat中运行良好:

 D:\>call d:\ant\bin\ant Buildfile: D:\...\build.xml sign: [echo] [C@12a642 BUILD SUCCESSFUL Total time: 8 seconds 

但是getPassword()返回char []而不是String,这是因为echo不是人类可读的。

作为替代方案,将所需的storepass放在一个不可见的文件中,例如.deployconf ,具有用户访问权限:例如400600 。 在ant加载密码,并根据需要使用:

  

这适用于 ,尽管可能需要一些努力来保持.deployconf换行符。