有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我想从ant脚本显示一个密码输入对话框。这是我在构建中的代码。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) 个答案

  1. # 1 楼答案

    它在Windows XP下的Eclipse Juno版本构建id:20120614-1722和JDK 7中运行良好:

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

    从运行开始,它运行良好。蝙蝠:

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

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

  2. # 2 楼答案

    或者,将<signjar />所需的storepass放在一个不可见的文件中,例如.deployconf,只允许用户访问:例如400600。在ant中加载密码,并根据需要使用:

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

    这对<signjar />很有效,尽管可能需要一些努力才能将linefeed排除在.deployconf之外