3

我的构建文件中有以下代码

<target name="foo">
<some stuff>
</target>
<target name="bar" depends="foo">
<some other stuff>
</target>

当我这样做时,即使失败,ant bar我也希望目标运行。我该怎么做呢?barfoo

我不想使用来自 ant-contrib 的 try catch。

4

2 回答 2

3

考虑Antcontrib:TryCatch

<target name="foo">
  <some stuff>
</target>

<target name="bar">
  <trycatch>
    <try>
      <antcall target="foo"/>
    </try>
    <catch>
      <fail/>
    </catch>
    <finally>
      <some other stuff>
    </finally>
  </trycatch>
</target>
于 2014-10-30T08:19:37.663 回答
3

首先,Ant 不是一种编程/脚本语言。它是一个构建工具,所以它有局限性。

根据您的要求,我从手册中找到了这个:

-keep-going,执行所有不依赖于失败目标的目标

想想“依赖”是为了什么而设计的。当依赖失败时,不应执行目标。

另一种方法是使用subant(当然,不使用depends)。

<target name="foo">
    <fail message="fail" />
</target>

<target name="bar">
    <subant failonerror="false" target="foo">
        <fileset dir="." includes="build.xml"/>
    </subant>
    <echo message="still runs"/>
</target>

哪个输出:

bar:

foo:
   [subant] Failure for target 'foo' of: c:\Tools\files\build.xml
   [subant] The following error occurred while executing this line:
   [subant] c:\Tools\files\build.xml:11: fail
   [echo] still runs

但是..它看起来很丑。

另一种方法是实现您的自定义 Ant 入口点,并在其中做任何您想做的事情。用ant -main <class> bar.

如果您想坚持下去depends,并且您有任何foo不支持的任务failonerror,并且您不想要try-catch,那么我也不知道该怎么做。

于 2013-11-13T08:24:52.697 回答