gpt4 book ai didi

Ant 目标调用

转载 作者:行者123 更新时间:2023-12-04 05:24:55 26 4
gpt4 key购买 nike

仅当条件为真时,我才想调用 target backup.yes。

<condition property="directory.found.yes">
<equals arg1="${directory.found}" arg2="true"/>
</condition>

<antcall target="update.backup"/>

有没有办法做到这一点。

最佳答案

而不是 <antcall/> , 请执行下列操作:

假设您正在调用目标 foo ,并且您想在之前进行备份,但前提是该条件存在:

<target name="foo"
depends="update.backup">
<..../>
</target>

<target name="update.backup.test">
<condition property="directory.found.yes">
<equals arg1="${directory.found}" arg2="true"/>
</condition>
</target>

<target name="update.backup"
depends="update.backup.test"
if="directory.found.yes">
<.../>
</target>
<antcall/> 的问题是当 Ant 使用的依赖矩阵被破坏时使用它,它用于强制在另一个任务完成之前完成一个任务。当真的被滥用时,你最终会多次调用同一个任务。我在这里有一个项目,它实际上对每个目标调用了 10 到 14 次,并且有超过两打目标。我重写了整个构建无 <antcall/>并且通过使用真正的依赖设置,将构建时间减少了 75%。

根据我的经验,90% 的 <antcall/>是由于糟糕的目标依赖管理。

假设您要执行目标 foo . (用户想要真正执行的目标),以及之前 foo被调用时,您想要进行备份,但前提是该目录确实存在。

在上面, foo叫做。这取决于 update.backaup .目标 update.backup被调用,但它取决于 update.backup.test这将测试目录是否实际存在。

如果目录存在, if关于 update.backup 的条款task 为真,任务将实际执行。否则,如果目录不存在,它将不会执行。

请注意 update.backup首先调用任何依赖项 之前 它检查 if 上的属性是否或 unless target 的参数实体被检查。这允许目标在尝试执行之前调用测试。

这不仅仅是一个副作用,而是内置于 Ant 的设计中。事实上,Ant Manual on Targets]( http://ant.apache.org/manual/targets.html ) 专门给出了一个非常相似的例子:
<target name="myTarget" depends="myTarget.check" if="myTarget.run">
<echo>Files foo.txt and bar.txt are present.</echo>
</target>

<target name="myTarget.check">
<condition property="myTarget.run">
<and>
<available file="foo.txt"/>
<available file="bar.txt"/>
</and>
</condition>
</target>

并指出:

Important: the if and unless attributes only enable or disable the target to which they are attached. They do not control whether or not targets that a conditional target depends upon get executed. In fact, they do not even get evaluated until the target is about to be executed, and all its predecessors have already run.

关于 Ant 目标调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15877714/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com