这是很草率的,但它的作品。蚂蚁实际上是非常容易的脚本,如果你使用的是至少Java 6中(也可能是Java 7中),JavaScript的支持是内置的,因此可以使用权开箱。该定义将呼应任何目标的依赖关系调用顺序任务:
<scriptdef name="listdepends" language="javascript">
<attribute name="target"/>
<![CDATA[
var done = [];
var echo = project.createTask("echo")
function listdepend(t) {
done.push(t.getName());
var depends = t.getDependencies();
while (depends.hasMoreElements()) {
var t2 = depends.nextElement();
if (done.indexOf(t2)==-1) listdepend(project.getTargets().get(t2));
}
echo.setMessage(t.getName());
echo.perform();
}
var t = attributes.get("target");
if (t!=null) {
var targ = project.getTargets().get(t);
listdepend(targ);
}
]]>
</scriptdef>
在你的情况,你可以创建一个新的目标(或没有),并调用它像这样:
<target name="listfoo">
<listdepends target="foo"/>
</target>
正如我所说,这是有点草率。它可能不是很快(尽管除非你的目标触发了成千上万的人,它可能并不明显慢)。它不会处理antcall任务(尽管可以轻松修改它),也可以对属性进行响应。如果依赖关系嵌套太深,它可能会遇到递归深度限制(但我怀疑任何项目都将它们嵌套得足够深)。
的数组用于确保每个依赖性列出一次(蚂蚁只会运行它们一次)。