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

时间:2013-02-12 15:25:55

标签: java javascript swing ant

我想从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进行测试

2 个答案:

答案 0 :(得分:1)

在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不是人类可读的。

答案 1 :(得分:1)

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

<loadfile srcfile="${user.home}/.deployconf" property="deployconf"/>

这适用于<signjar />,但可能需要付出一些努力才能将换行符排除在.deployconf之外。