在 Apache Ant 中,有没有办法从 ant 命令中获取参数并将其用作属性文件的键?
Posted
技术标签:
【中文标题】在 Apache Ant 中,有没有办法从 ant 命令中获取参数并将其用作属性文件的键?【英文标题】:In Apache Ant, is there a way to take an argument from an ant command and use that as a key for a property file? 【发布时间】:2014-07-27 03:19:09 【问题描述】:假设我们有一个参数被传递给一个 ant 命令,如下所示:
ant -Dparameter="potato" myAntCommand
通常,我们会像这样在 build.xml 中获取该参数:
<target name="myAntCommand">
<echo message="$parameter"/>
</target>
是否可以通过 ant 使用相同的参数从属性文件中获取值?
例如,如果我们有一个包含以下值的属性文件:
potato="HelloWorld"
strawberry="GoodbyeWorld"
有什么办法可以让前面的代码作为参数传入“potato”,并让“HelloWorld”作为输出?
【问题讨论】:
【参考方案1】:有一种方法,但是您必须下载一个 JAR 并将其添加到您的 Ant 安装中。
您将需要Antlibs Props,它被列为Apache Ant Libraries 之一,但无法在该站点下载(仅列出了 GIT 存储库)。正如您在最后一页中看到的,您可以使用 nested
委托来允许嵌套属性扩展。
JAR 是ant-props-1.0Alpha.jar
。我不知道为什么它不再可用。搜索它,我发现它可以在this link 找到,它不是官方下载站点,但它现在可能有用。
您只需将 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"/>
然后你可以像这样使用打开功能:
<propertyhelper xmlns:props="antlib:org.apache.ant.props">
<props:nested />
</propertyhelper>
现在您可以使用$$property
语法来解析解析为另一个属性的属性。
这是一个完整的例子。我在文件中声明了属性,但它与 Properties 文件中的属性 或在命令行中使用 -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
【讨论】:
感谢您的回复。这正是我想要的!以上是关于在 Apache Ant 中,有没有办法从 ant 命令中获取参数并将其用作属性文件的键?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法通过ANT或其他一些构建自动化系统自动生成JWG文件/编译Openscript文件?