【发布时间】:2014-05-08 14:44:08
【问题描述】:
有没有办法让 ant 多次执行多个依赖目标。考虑一下:
<target name="buildall" depends="mycommon,myDAO" />
<target name="myCommon" depends="initCommon, clean, makedir, compile" description="">
<echo> Build completed for myCommon </echo>
</target>
<target name="myDAO" depends="initDAO, clean, makedir, compile" description="">
<echo> Build completed for myDao </echo>
</target>
我希望 buildAll 调用 myCommon,它调用 initCommon、clean、makedir、compile,然后调用 myDAO,它调用 initDAO、clean、makedire、compile。
所以我希望多次执行 clean、makedir 和 compile 任务。它们是通用的,根据 initXXX 任务中设置的属性运行。
我试过了:
<target name="buildall">
<antcall target="myCommon" />
<antcall target="myDao" />
</target>
但这每次都运行任务之外的所有内容,这不是我想要的。有什么想法吗?
【问题讨论】:
-
您所说的“每次都在任务之外”是什么意思?似乎
<antcall>可以按照您的意愿运行目标,但会引入其他问题? -
是的 - 我有一堆
和 任务作为 标记的子项。也许那是错误的。无论我指定多少个目标,这些任务我都想运行一次。 -
问题是,如果我从 Eclipse 运行并指定多个目标,它只运行
元素一次,它运行每个目标及其每个依赖项(即使依赖项已经之前运行)。当我在 Eclipse 中运行时,一切都很好。当我在 Eclipse 之外运行时,它的工作原理就不一样了。 -
哦,出现这个问题是因为每次调用
<antcall>时,Ant都会为当前的构建文件创建一个新的Project实例。通过这种方式,您可以控制调用目标(及其之前的)中声明的属性和引用是否应该由被调用目标继承——inheritAll和inheritRefs。我不使用 Eclipse,所以我不知道它的行为和原因,但你的问题正是纯 Ant 的工作原理。 -
一个非常非常简单的解决方案:编写自己的 Ant 任务,可能命名为
<runonce>,赋予它运行嵌套 Ant 任务的能力,并在其execute()方法中: 1. 检查系统是否财产,例如“冉”,已定; 2.如果设置,则返回;如果没有,运行嵌套任务; 3.设置系统属性“Ran”。
标签: ant