在定义顺序构建步骤时,我使用 target
元素的 depends
属性。我最近看到了一个 ant 文件,其中构建序列由目标内的 antcall
元素定义。
举例说明:
<target name="a" depends="b">
...</target>
对
<target name="a">
<antcall target="b"/>
...</target>
这两种方法有真正的区别吗?其中一个更可取吗?
最佳答案
最大的不同是Ant会保证通过depends
声明的依赖被调用最多一次。例如:
<target name="a" />
<target name="b" depends="a" />
<target name="c" depends="a" />
<target name="d" depends="b, c" />
如果我调用目标 d
,则调用 b
和 c
。然而,a
只被调用一次(即使 b
和 c
都依赖它)。
现在假设我们决定使用 antcall
而不是依赖于目标 d
:
<target name="d">
<antcall target="b" />
<antcall target="c" />
</target>
调用目标 d
现在将调用目标 b
和 c
;然而,目标 a
将被调用两次,一次用于 b
,另一次用于 c
。
换句话说,antcall
回避了作为 Ant 基石的正常依赖规则。
我不认为应该使用 antcall
来替代普通的 Ant 类依赖项;这就是 depends
的用途。那么什么时候使用呢? antcall
任务确实允许您控制定义了哪些属性和引用(这就是创建新 Ant 环境的原因——以及它如此缓慢的原因),因此它可以用于创建相同的变体事物;例如,可能有两个 jar ,一个有调试符号,一个没有调试符号。
然而,过度使用 antcall
会产生缓慢、脆弱且难以维护的构建脚本。把它想象成 Ant 的 goto
——它是邪恶的。大多数编写良好的构建脚本根本不需要它,除非在特殊情况下。
关于java - ant 依赖与 antcall,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5936947/