我知道如何在ANT中运行单个目标,但它还会检查“depends”属性并在目标之前运行它们。有没有办法防止这种情况或方法来构建我的ANT文件,以便我可以更容易地做到这一点?
答案 0 :(得分:11)
创建目标的“withoutdeps”版本。如果你有
<target name="A" depends="B">
...
</target>
更改为
<target name="A" depends="B,AwithoutDeps"/>
<target name="AwithoutDeps">
...
</target>
现在你可以正常调用A(这将触发B然后AwithoutDeps)或者只是显式调用AwithoutDeps并且不会触发deps。 [注意“依赖”按顺序调用依赖项]
当然,选择一些比这些更好的名字;)
答案 1 :(得分:2)
我认为你唯一的简单选择就是制作一个有问题的目标副本,并使其没有依赖性。
答案 2 :(得分:2)
一种可能性是在依赖关系目标上使用if
或unless
属性。例如:
<target name="dependency1" unless="dependency1.disabled">
<echo>Hello from dependency 1!</echo>
</target>
<target name="dependency2" unless="dependency2.disabled">
<echo>Hello from dependency 2!</echo>
</target>
<target name="main-target" depends="dependency1, dependency2">
<echo>Hello from the main target!</echo>
</target>
现在您可以使用-Ddependency1.disabled=true
和/或-Ddependency2.disabled=true
运行Ant,以省略您不想要的依赖项,但默认设置仍然是包含它们。
当然,如果对你来说更容易,你可以简单地拥有一个“全球”dependencies.disabled
属性。
如果您想执行此行为的 converse (默认情况下排除依赖项),只需使用if
而不是unless
(并具有属性名称)比如“dependency1.enabled”而不是“disabled”)。
答案 3 :(得分:1)
我会做这样的事情:
<target name="doSomethingNoDeps">
...
</target>
<target name="doSomething" depends="doSomeOther">
<antcall target="doSomethingNoDeps"/>
</target>
答案 4 :(得分:-1)
我用一段代码制作了宏,我想要的。 然后制作2个目标,1个用“arg1”调用宏,用“arg2”调用第2个。 您也可以在不接受参数的情况下制作宏。
<macrodef name="macro-jar">
<attribute name="dir" />
<sequential>
<jar destfile="${jar.name}">
<fileset dir="@{dir}" .../>
...
...
</jar>
</sequential>
</macrodef>
从代码中的2个位置调用它:
第一:
<macro-jar dir="${dir.build}" />
第二
<macro-jar dir="${dir.temp}" />