【问题标题】: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?在 Apache Ant 中,有没有办法从 ant 命令中获取参数并将其用作属性文件的键?
【发布时间】: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”作为输出?

【问题讨论】:

    标签: xml apache ant properties-file


    【解决方案1】:

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

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

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

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

    在您的build.xml 中,您必须为扩展设置命名空间和类型定义。在&lt;project&gt; 中的某处添加此内容:

    <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
    

    【讨论】:

    • 感谢您的回复。这正是我想要的!
    猜你喜欢
    • 1970-01-01
    • 2016-09-08
    • 2014-10-09
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多