在Apache Ant中,有没有办法从ant命令中获取参数并将其用作属性文件的键?

时间:2014-06-05 23:34:53

标签: xml apache ant properties-file

假设我们有一个参数传递给ant命令,如下所示:

ant -Dparameter="potato" myAntCommand

通常,我们会在build.xml中获取该参数,如下所示:

<target name="myAntCommand">
    <echo message="${parameter}"/>
</target>

是否可以通过ant使用相同的参数从属性文件中获取值?

例如,如果我们有一个包含以下值的属性文件:

potato="HelloWorld"
strawberry="GoodbyeWorld"

有什么方法可以让前面的代码在“potato”中作为参数传递,并将“HelloWorld”作为输出?

1 个答案:

答案 0 :(得分:2)

的一种方式,但您必须下载JAR并将其添加到Ant安装中。

您需要Antlibs Props,它被列为Apache Ant Libraries之一,但在站点上无法下载(仅列出GIT存储库)。正如您在最后一页中所述,您可以使用nested委托来允许嵌套属性扩展。

JAR是ant-props-1.0Alpha.jar。我不知道为什么它不再可用。搜索它,我在this link找到了它,它不是官方下载站点,但它现在可能有用。

您只需将JAR放入$ANT_HOME/lib目录即可在任何项目中使用它。

build.xml中,您必须为扩展名设置名称空间和typedef。在<project>

中添加此内容
<typedef uri="antlib:org.apache.ant.props"
         resource="org/apache/ant/props/antlib.xml"
         classpath="ant-props-1.0Alpha.jar"/>

然后你就可以使用这样的功能:

<propertyhelper xmlns:props="antlib:org.apache.ant.props">
    <props:nested />
</propertyhelper>

现在,您可以使用${${property}}语法来解析解析为另一个的属性。

这是一个完整的例子。我在文件中声明了属性,但它与属性文件中的属性或命令行中使用-D的属性相同:

<project default="command">
    <typedef uri="antlib:org.apache.ant.props"
             resource="org/apache/ant/props/antlib.xml"
             classpath="ant-props-1.0Alpha.jar"/>

    <propertyhelper xmlns:props="antlib:org.apache.ant.props">
       <props:nested />
    </propertyhelper>

    <property name="potato" value="HelloWorld"/>
    <property name="parameter" value="potato"/>

    <target name="command">
        <echo message="${${parameter}}"/>
    </target>
</project>

当你跑步时:

ant

打印:

command:
     [echo] HelloWorld