假设我们有一个参数被传递到ant命令中,如下所示:
ant -Dparameter="potato" myAntCommand
通常,我们会像这样在build。xml中获取该参数:
<target name="myAntCommand">
<echo message="${parameter}"/>
</target>
是否可以通过ant使用相同的参数从属性文件中获取值?
例如,如果我们有一个包含以下值的属性文件:potato="HelloWorld"
strawberry="GoodbyeWorld"
是否有任何方法我可以有前面的代码传递在"土豆"作为参数,并有"HelloWorld"作为输出?
有一种方法,但是您必须下载一个JAR并将其添加到Ant安装中。
您将需要作为Apache Ant库之一列出的Antlibs Props,但在站点上无法下载(仅列出了GIT存储库)。正如您在最后一页中所看到的,您可以使用nested
委托来允许嵌套属性扩展。
JAR是ant-props-1.0Alpha.jar
。我不知道为什么它不再可用了。搜索它,我发现它可以在这个链接,这不是一个官方的下载网站,但它可能是有用的,现在。
你只需要把JAR放到你的$ANT_HOME/lib
目录中,就可以在任何项目中使用它。
在build.xml
中,您必须为扩展设置名称空间和类型。把它添加到你的<project>
:
<typedef uri="antlib:org.apache.ant.props"
resource="org/apache/ant/props/antlib.xml"
classpath="ant-props-1.0Alpha.jar"/>
然后你可以像这样使用turn the feature on:
<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