Ant条件属性扩展未按预期工作



所以,我在ant中有这样的设置:

<target name="context">
    <echo>docbase: ${docbase.dir}</echo>
    <antcall target="_context.docbase"/>
    <antcall target="_context.nodocbase"/>
</target>
<target name="_context.docbase" if="${docbase.dir}">
    <echo>Context with docbase</echo>
    <context.md docbase="..."/>
</target>
<target name="_context.nodocbase" unless="${docbase.dir}">
    <echo>Context without docbase</echo>
    <context.md/>
</target>

docbase.dir设置为true或false时,事情会如您所期望的那样工作。但是,当docbase.dir由于某种原因被设置为实际值(例如/tmp/docbase)时,它击中_context.nodocbase目标而不是预期的_context.docbase目标。

阅读文档意味着,如果展开的属性不是"truthy"或"falsy"常量中的一个,那么它只会像以前一样解释它,但这不是我所看到的。

我做错了什么?我应该使用不同的方法吗?

注意:我使用的是Ant 1.8.2(条件参数扩展从1.8.0开始)。

如前所述:http://ant.apache.org/manual/properties.html

从Ant 1.8.0开始,您可以使用属性扩展;值true(或on或yes)将启用该项,而false(或off或no)将禁用该项。其他值仍被假定为属性名称,因此只有在定义了命名属性时才会启用该项。

这是一些非常微妙的信息。因此,在您的代码中,${docbase.dir}被扩展为"/tmp/docbase"。这不是true/on/yes/false/off/no,所以Ant然后查找名为"/tmp/docbase"的属性。它找不到它,所以它运行unless


这里有一个例子,我希望它能澄清问题。这将仅运行if目标:

<project name="MyProject" default="context" basedir=".">
    <target name="context">
        <echo>docbase: ${docbase.dir}</echo>
        <property name="/tmp/docbase" value="i exist!"/>
        <antcall target="_context.docbase"/>
        <antcall target="_context.nodocbase"/>
    </target>
    <target name="_context.docbase" if="${docbase.dir}">
        <echo>Context with docbase</echo>
    </target>
    <target name="_context.nodocbase" unless="${docbase.dir}">
        <echo>Context without docbase</echo>
    </target>
</project>

这里重要的是这一行:

        <property name="/tmp/docbase" value="i exist!"/>

因为定义了该属性,所以它将运行if,而不是unless

相关内容

  • 没有找到相关文章

最新更新