我对蚂蚁很陌生,而且我看过鲍勃叔叔的“提取物直到你放弃”这一集。
因此,我尝试尽可能小地定义ant-targets,这样你就可以准确地看到目标的本质,而不是更多。有关更多详细信息,您必须参考子目标。
无论是好的还是坏的风格都是不同的辩论(或者可能是火焰战争)。
因此,我创建的构建脚本在伪代码中看起来像这样:
build =
compile
instrument if coverage
coverage
任务也分为子目标:
coverage:
create-coverage-dirs
call-cobertura
编辑 - 我想表达不应该运行coverage
个子目标。
但是......我很难在蚂蚁中表达这种“干净利落”。
假设我可以使用depends
属性来指示...目标间依赖关系,我得到类似的结果:
<target name="build" depends="compile, coverage"/>
<target name="compile"> .... </target>
<target name="coverage" depends="
create-coverage-dirs,
taskdef-cobertura"
if="build.with.coverage">
<cobertura-instrument ...> ... </cobertura-instrument>
</target>
<target name="create-coverage-dirs">
...
</target>
<target name="taskdef-cobertura">
...
</target>
这看起来不错!
只有在执行时,coverage
任务才被删除,但当build.with.coverage
为false
时,它的子任务仍然执行!
>ant -v compile
Build sequence for target(s) `build' is
[compile, create-coverage-dirs, taskdef- cobertura, coverage, build]
Complete build sequence is
[compile, create-coverage-dirs, taskdef-cobertura, coverage, build, ]
我可以在每个coverage子任务中添加if
属性,但这对我来说似乎并不干净。
所以这就是问题:
if
应该以这种方式使用,还是有if-and-recurse
种属性?答案 0 :(得分:3)
答案 1 :(得分:2)
在这种情况下,我根本不会使用属性,而只依赖于depends
(这对我来说对此任务来说更自然):
<target name="build" depends="compile, coverage"/>
<target name="compile"> ...
<target name="coverage"
depends="compile, instrument,
create-coverage-dirs, taskdef-cobertura"> ...
答案 2 :(得分:1)
if attribute测试属性是否存在,而不是true或false。如果您不想运行coverage目标,则不要定义属性build.with.coverage
。
从Ant 1.8.0开始,您可以使用属性扩展将属性重新设置为布尔值:
<target name="coverage" depends="
create-coverage-dirs,
taskdef-cobertura"
if="${build.with.coverage}">