繁体   English   中英

蚂蚁条件属性扩展无法按预期工作

[英]Ant conditional property expansion not working as expected

因此,我在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您期望的那样工作。 但是,由于某些原因将docbase.dir设置为实际值(例如/tmp/docbase )时,它将达到_context.nodocbase目标,而不是预期的_context.docbase目标。

阅读文档意味着,如果扩展属性不是“假”常量的“真实”之一,则它将像以前一样解释它,但这不是我所看到的。

我究竟做错了什么? 我应该使用其他方法吗?

注意:我正在使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM