包含java调用的Ant任务,接收将像系统属性参数一样设置的参数

时间:2013-12-13 13:12:18

标签: java ant

我很抱歉这个标题,但我无法弄清楚如何用一句话来描述这个问题。

我有下一个build.xml代码:

<project name="Project" default="configure-and-run" basedir=".">
        <target name="run">
                <java classname="Main">
                        <classpath location="."/>
                        <sysproperty key="key1" value="value1"/>
                </java>
        </target>

        <target name="configure-and-run">
                <antcall target="run">
                        <param name="key2" value="value2"/>
                </antcall>
        </target>
</project>

在这种情况下,对键key1-> value1可以在java代码下获得:

System.getProperty("key1");

我的问题是:如何提供,或者更确切地说,如何获取“运行”目标上的参数,并将这些参数提供给java ant任务?

在上面的例子中,在Main类启动之后,我希望我有可能获得“value2”:

System.getProperty("key2");

提前致谢。

与此同时,我找到了一个解决方法:

我的父ant任务有一个参数列表。 让我复制并修改上面的代码:

<project name="Project" default="configure-and-run" basedir=".">
    <target name="run">
        <java classname="Main">
            <classpath location="."/>
            <sysproperty key="${prop1key}" value="${prop1value}"/>
            ...
            <sysproperty key="${propNkey}" value="${propNvalue}"/>
        </java>
    </target>
    <target name="configure-and-run">
        <antcall target="run">
            <param name="prop1key" value="myKey"/>
            <param name="prop1value" value="myValue"/>
        </antcall>
    </target>
</project>

参数数量可变,具体取决于您的需求。

我希望这件事能帮助别人,就像它帮助了我一样。

度过愉快的一天。

1 个答案:

答案 0 :(得分:1)

以下Ant脚本使用<syspropertyset> <java>的嵌套元素将其他属性传递给Java程序。

<target name="run">
    <java classname="Main">
        <classpath location="."/>
        <sysproperty key="key1" value="value1"/>
        <syspropertyset refid="additional-java-sysproperties"/>
    </java>
</target>

<target name="configure-and-run">
    <property name="key2" value="value2"/>
    <propertyset id="additional-java-sysproperties">
        <propertyref name="key2"/>
    </propertyset>

    <antcall target="run">
        <reference refid="additional-java-sysproperties"/>
    </antcall>
</target>