在运行时期间操作ANT任务(设置属性)

时间:2012-04-27 15:07:30

标签: java ant

我在项目中使用ant任务来做很多事情,比如创建目录,删除文件等等。在这种情况下,我从我的SVN服务器获得一个分支列表,它完美地工作。这一切都发生在我的程序运行期间,从java代码中解雇任务。

我的问题是:是否可以操作ant文件(tasks.xml)?用户应输入用户名/密码组合,在触发任务时,应在我的ant-task中使用这些凭据而不是属性。

蚁文件:               

<target name="getBranchList">
    <exec executable="c:/svnclient/svn.exe" 
            output="c:/test/output/versionsonsvn.log">
        <arg value="ls" />
        <arg value="--username" />
        <arg value="${svn.user}" />
        <arg value="--password" />
        <arg value="${svn.password}" />
        <arg value="--non-interactive" />
        <arg value="--trust-server-cert" />
        <arg value="${svn.server}" />
    </exec>
</target>

我如何在Java中使用它:

import org.apache.tools.ant.*;

public static void main(final String[] args) {
    Vector<String> v = new Vector<String>();
    v.add("getBranchList");
    v.add("someOtherTask");
    fireAntTasks("c:/test/tasks.xml", v); }

private void fireAntTasks(String fileName, Vector<String> v) {
    File taskFile = new File(fileName);
    if (buildFile.exists()) {
        Project p = new Project();
        p.setUserProperty("ant.file", buildFile.getAbsolutePath());
        p.init();
        ProjectHelper helper = ProjectHelper.getProjectHelper();
        p.addReference("ant.projectHelper", helper);
        helper.parse(p, buildFile);
        p.executeTargets(v);

    } else {
        System.out.println("File not found!");
    }
}

我能想象的唯一解决方案是直接操作文件(在运行时设置“tasks.xml”中的属性)。但也许有更好的方法让这个工作......

问候

基督教

2 个答案:

答案 0 :(得分:1)

我不确定我是否完全理解你,但我猜你试图让用户输入来替换一些属性。

您可以使用Input Task来提示您可以存储的用户的变量。

或者您可以在通过property task执行ant之前加载用户编辑的属性文件。

答案 1 :(得分:1)

您可以使用loadproperties task和属性文件

来实现这样的目标
<loadproperties srcFile="build.properties"/>

每个用户都必须在构建目录中创建build.properties并将值放在其中:

svn.user = user
svn.password = password

您也可以创建它,以便这些文件驻留在主目录中:

<loadproperties srcFile="${user.home}/build.properties"/>

这样文件将受到更多保护。