Ant是否提供绕过依赖的方法?

时间:2008-12-17 14:23:26

标签: ant build

build.xml有一个 test 和一个 build 目标。 test 目标显然取决于 build 目标。

如何只运行测试目标,暂时跳过编译,而不修改build.xml文件?

我问,因为编译太长,并且由持续集成服务器保持最新;而且我正在追逐单元测试的问题。

5 个答案:

答案 0 :(得分:29)

使用unless属性。

<target name="test" unless="dont.run.tests">

如果您不想运行“test”,只需

  

ant -Ddont.run.tests = true

如果要运行测试,则应该是未定义的。 Ant只是检查它是否已定义。此外,还有一个if属性可以进行相反的操作。

这两者都是article

答案 1 :(得分:19)

不,如果不修改构建文件,就不能跳过它。

以下是我在解决此问题的项目中所做的工作。 对于每个公共目标,我将在其前面创建一个“do-”的私有目标。 私有目标没有依赖关系,公共目标将“do-”目标作为依赖关系。

例如:

<target name="compile" depends="init, do-compile" description="Compiles all of the source code" />

<target name="do-compile">
        <javac destdir="${classes.dir}" debug="true" encoding="ISO-8859-1">
            <src refid="src.path" />
            <include name="*.java" />
            <classpath refid="external.libraries.classpath" />
        </javac>
</target>

答案 2 :(得分:4)

就我个人而言,我发现Ant中的依赖项内容不仅仅是帮助。我通常设置两组目标 - 实际上做东西(没有依赖项),然后具有依赖项的目标。通过这种方式,您可以轻松运行单个目标,并且您还可以轻松运行整个套件等。这符合我视图中的实用(而不是意识形态)用途。

答案 3 :(得分:2)

如果代码没有改变,编写良好的构建目标将不需要重建任何东西。因此,测试目标取决于它的事实应该在很大程度上无关紧要。如果你连续两次运行构建目标并且它第二次尝试重建某些东西,你可能想要调查它为什么这样做。

避免执行目标的简单方法是将目标的“除非”属性设置为某个属性的名称。如果您在运行Ant时在命令行上设置此属性,它将绕过该目标。

答案 4 :(得分:0)

暂时“删除”依赖项?“如果代码已构建,那么所有文件都应该可用,不是吗? - 哎呀,只是看到你无法改变档案,嗯,为什么你不先在当地经营同样的工作?