根据条件直接和间接调用Ant目标

Call Ant target directly and indirectly based on condition

我在构建文件中定义了以下默认目标:

<target name="main" depends="generate.doc" unless="generated.doc.present"/>

当文档文件已经存在时设置属性。在那种情况下,我什么都不想做。但是,它不起作用,因为从属目标总是在评估条件之前执行。

我仍然需要能够直接调用依赖目标并执行它,无论输出是否已经存在。因此这样的事情是行不通的:

<target name="main" depends="generate.doc"/>
<target name="generate.doc" unless="generated.doc.present">...</target>

有没有在主目标中不使用antcall的解决方案?

在下面的示例中,main <target> 已更改为具有两个依赖项。名为 -pre-conditions 的新 <target> 将在 generate.doc.

之前 运行

仅当 generated.doc.present 属性 已设置时,-pre-conditions <target> 才设置 skip-generate.doc 属性。

generate.doc <target> 已更改,因此如果 -pre-conditions 设置 skip-generate.doc 属性.

将被跳过

通过这些更改,generate.doc 在直接调用时将始终 运行。

<target name="-pre-conditions">
    <condition property="skip-generate.doc">
        <isset property="generated.doc.present"/>
    </condition>
</target>

<target name="main" depends="-pre-conditions, generate.doc"/>

<target name="generate.doc" unless="skip-generate.doc">
    <echo>generate.doc running</echo>
</target>