情况如下:
我有一个java应用程序(netbeans项目),它使用几个java库(每个都是一个netbeans项目)。我有一个自动构建脚本,使用ant而不使用netbeans IDE构建应用程序。构建应用程序的命令是
ant jar
工作正常,它递归地为所有依赖库构建jar,最后为应用程序jar构建。
现在,我想在自动构建中运行所有单元测试。默认的ant目标取决于目标jar
,test
和javadoc
,所以我想我可以简单地调用
ant
作为构建命令。和以前一样,所有jar都是为依赖库构建的,但是只执行应用程序项目的单元测试(对于javadoc,btw来说也是如此)。
那么,我如何让ant以递归方式为每个依赖库项目运行单元测试?
使用的版本是:netbeans 8,junit 4。
我找到的唯一解决方案是在每个库和应用程序项目中为ant使用的build.xml
添加依赖项:
<target name="-pre-jar" depends="test" />
但这意味着要对jar文件的每个版本执行所有测试。由于netbeans也使用这些build.xml
文件,因此每个简单的构建都会导致执行所有单元测试。
答案 0 :(得分:0)
经过一些测试后,我认为我找到了一个有效的解决方案。
我必须将以下代码添加到每个netbeans项目的build.xml
中,其中应运行单元测试(fyi:netbeans为build.xml
提供了构建过程的个人更改)。< / p>
<target name="-pre-jar" depends="test-on-release" />
<target name="test-on-release" if="release.runtests">
<antcall target="test" />
</target>
然后,如果我在命令行上运行ant,我必须定义属性release.runtests
以启用unittests的执行:
ant -Drelease.runtests= jar
如果从调用中删除属性的定义,则不会执行目标test-on-release,因此不会运行测试。当我使用netbeans IDE构建项目时也会发生同样的情况。
那就是说,它是一个解决方案,而不是 解决方案,至少不是我所希望的解决方案。如果有一种方法可以递归地运行测试目标而不必编辑所有这些build.xml
文件,那将会更方便。也许这对netbeans生成的构建文件给出的约束是不可能的。