我想显示一个来自ant脚本的密码输入对话框。以下是build.xml:中的代码
<target name="sign" unless="isUpToDate">
<script language="javascript">
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";
}
</script>
<echo message="${keypass}"></echo>
...
</target>
此代码将永远挂起。怎么了?
更新:我正在Mac OS X 10.8.2和Oracle JDK 7u13 中进行测试
它在WindowsXP:下的Eclipse Juno Release Build id:20120614-1722和JDK 7中运行良好
Buildfile: D:...build.xml
sign:
[echo] [C@ea1569
BUILD SUCCESSFUL
Total time: 7 seconds
它在Run.bat:中运行良好
D:>call d:antbinant
Buildfile: D:...build.xml
sign:
[echo] [C@12a642
BUILD SUCCESSFUL
Total time: 8 seconds
但是getPassword()返回的是char[]而不是String,这是因为echo不是人类可读的。
另一种选择是,将<signjar />
所需的storepass
放在一个不可见的文件中,例如.deployconf
,该文件只能由用户访问:例如400
或600
。在ant
中加载密码,并根据需要使用:
<loadfile srcfile="${user.home}/.deployconf" property="deployconf"/>
这与<signjar />
配合得很好,尽管可能需要付出一些努力才能将换行符排除在.deployconf
之外。