我的构建文件中有以下代码
<target name="foo">
<some stuff>
</target>
<target name="bar" depends="foo">
<some other stuff>
</target>
当我这样做时,即使失败,ant bar
我也希望目标运行。我该怎么做呢?bar
foo
我不想使用来自 ant-contrib 的 try catch。
<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>
首先,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
,那么我也不知道该怎么做。