【问题标题】:Call Ant target directly and indirectly based on condition根据条件直接和间接调用 Ant 目标
【发布时间】:2017-07-12 13:36:12
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • generated.doc.present 属性是如何设置的?它是设置在 Ant 内部还是外部?如果设置在 Ant 内部,是设置在 &lt;target&gt; 内部还是外部?
  • 我对问题的描述有点困惑。你是说当你调用main时你只希望文档不存在时生成它,但是当你直接调用generate.doc时你希望它无论如何都生成?
  • @Chad Nouis,该属性在同一构建文件中和&lt;target&gt; 之外设置为&lt;available file="${generatedRoot}" type="dir" property="generated.doc.present"/&gt;
  • @CAustin,这正是我想要的。我们经常在我们的项目中调用ant 并且执行一些其他任务,例如编译源代码。包含用于生成文档的构建文件,如果文档不存在,只需调用 ant 也应该生成文档。但是,我们还需要能够在我们的项目上调用 ant generate.doc 来重新生成它。

标签: ant


【解决方案1】:

在下面的示例中,main &lt;target&gt; 已更改为具有两个依赖项。一个名为 -pre-conditions 的新 &lt;target&gt; 将在 generate.doc 之前运行。

仅当 generated.doc.present 属性已设置时,-pre-conditions &lt;target&gt; 才会设置 skip-generate.doc 属性。

generate.doc &lt;target&gt; 已更改,因此如果 -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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    • 2012-07-16
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多