假设我们有一个参数传递给ant命令,如下所示:
ant -Dparameter="potato" myAntCommand
通常,我们会在build.xml中获取该参数,如下所示:
<target name="myAntCommand">
<echo message="${parameter}"/>
</target>
是否可以通过ant使用相同的参数从属性文件中获取值?
例如,如果我们有一个包含以下值的属性文件:
potato="HelloWorld"
strawberry="GoodbyeWorld"
有什么方法可以让前面的代码在“potato”中作为参数传递,并将“HelloWorld”作为输出?
答案 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