15

build.xml 有一个测试和一个构建目标。测试目标显然取决于构建目标

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

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

4

5 回答 5

32

使用unless属性。

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

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

蚂蚁 -Ddont.run.tests=true

如果您希望测试运行,它应该是未定义的。Ant 只是检查它是否已被定义。此外,还有一个if属性可以相反。

这是一篇关于两者的文章。

于 2008-12-17T14:30:16.013 回答
21

不,您不能在不修改构建文件的情况下跳过它。

这是我在项目中为解决此问题所做的工作。对于每个公共目标,我将创建一个在其前面带有“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>
于 2008-12-17T14:30:29.663 回答
4

就我个人而言,我发现 Ant 中的依赖项不仅仅是帮助。我通常设置两组目标 - 真正做事情的目标(没有依赖关系),然后是只有依赖关系的目标。这样,您可以轻松运行单个目标,还可以轻松运行整个套件等。在我看来,这符合实际(而不是意识形态)用途。

于 2008-12-17T14:26:10.890 回答
2

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

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

于 2008-12-17T14:28:31.930 回答
0

只是暂时“删除”依赖关系?`如果代码已经构建,你的所有文件都应该可用,不是吗?- 哎呀,刚刚看到您无法更改文件,嗯,您为什么不先在本地运行相同的作业?

于 2008-12-17T14:27:45.583 回答