ANT - 运行单个目标但没有依赖关系

时间:2009-05-28 18:20:45

标签: java ant build

我知道如何在ANT中运行单个目标,但它还会检查“depends”属性并在目标之前运行它们。有没有办法防止这种情况或方法来构建我的ANT文件,以便我可以更容易地做到这一点?

5 个答案:

答案 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)

一种可能性是在依赖关系目标上使用ifunless属性。例如:

<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}" />