【问题标题】:How do I prevent a dependency from executing in Ant?如何防止依赖项在 Ant 中执行?
【发布时间】:2015-04-24 07:11:25
【问题描述】:

在调试 build.xml 文件或 Ant 任务时,我经常希望执行一项任务而不执行其依赖项。有没有办法从命令行做到这一点?

例如,使用这个 build.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<project>
    <target name="A" />
    <target name="B" depends="A" />
</project>

是否有执行任务 B 但不执行任务 A 的命令?

【问题讨论】:

标签: ant


【解决方案1】:

您可以使用ifunless 以属性为条件执行任何目标。

<project default="B">

    <target name="A" unless="no.a">
        <echo>in A</echo>
    </target>

    <target name="B" depends="A" >
        <echo>in B</echo>
    </target>

</project>

没有指定条件的输出:

$ ant
Buildfile: C:\Users\sudocode\tmp\ant\build.xml

A:
     [echo] in A

B:
     [echo] in B

BUILD SUCCESSFUL
Total time: 0 seconds

在命令行指定条件的输出:

$ ant -Dno.a=any
Buildfile: C:\Users\sudocode\tmp\ant\build.xml

A:

B:
     [echo] in B

BUILD SUCCESSFUL
Total time: 0 seconds

注意事项:

  • 即使条目被条件阻止,Ant 控制台输出也会显示目标已“命中”。
  • ifunless 条件不进行布尔检查。他们只是检查属性是否已定义。

【讨论】:

    【解决方案2】:

    您将不得不重组您的 Ant 脚本以实现此目的:

    <target name="B">
        <if>
            <isset property="some.property"/>
            <then>
                <antcall target="A">
            </then>
        </if>
        <!-- execute task B here -->
    </target>
    

    如果设置了some.property,那么它将首先执行A,然后执行B。否则会跳过任务A,自行执行B

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 2011-03-28
      • 2013-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多