我的目标很少,我需要执行。我创建了一个目标,命名所有这些,但我认为这不是这样做的方法吗?以下是调用所有其他目标的目标运行:
<target name="test.all" depends="build
echolaunching agent /echo
antcall target="RunJtfTests" /
antcall target="launchOpenAgent" /
antcall target="run.test" //target
target name="run.test" depends="build, launchOpenAgent, runJtfTests"
echo Launching test/echo
echo message="${toString:iControlSilk4J.classpath}" /
<java classname="com.miranda.icontrol.silk4j.installation.AdministrationCtrl"
classpath><fileset dir="${lib.dir}"
include name="**/*.jar" />
/fileset
pathelement path="${iControlSilk4J.classpath}" /
pathelement location="${jarPath}/Admin.jar" /
/classpath
</java>
</target>
它没有运行,我这样做是为了得到报告而我什么都没得到?怎么了 ?从我读到的,antcall就像一个不好的goto循环。我想改为考试。
- &GT;以下是我想要执行的所有测试:
但这可能更通用(关于我将在Silk4J中添加的测试)。有没有办法更通用?
答案 0 :(得分:5)
在我之后重复:
Ant不是一种编程语言。它是一种依赖矩阵语言。
这是一个重要的区别。你不告诉Ant要执行什么。你告诉Ant你需要什么,Ant会知道该怎么做。
我可以告诉你,在使用所有这些<antcall/>
来理解Ant时遇到了问题。这是禁忌,因为它可以让你不止一次执行任务。您的构建文件也毫无意义。
使用目标的dependency
参数。例如,这是一个骨架build.xml
文件:
<project>
<target name="clean"/>
<target name="prepare"/>
<target name="compile"
depends="prepare"/>
<target name="package"
depends="compile"/>
<target name="test-compile
depends="compile"/>
<target name="test"
depends="test-compile"/>
<target name="deploy"
depends="package"/>
<target name="post-test-results"
depends="test"/>
<target name="all"
depends="clean,post-test-results,deploy"/>
</project>
当我想运行目标all
时,我主要是指我想做一个干净的构建,发布我的测试结果,然后部署构建。 Makefiles也是如此。我没有列出我的所有任务。我为什么要关心我的编写准备工作?这不是我的担忧。
所以我打电话给all
,然后拨打clean
,post-test-results
和deploy
。除了称这三个目标之外,我不知道Ant会做什么。
等等......发布测试结果需要做什么?好吧,我可能需要运行我的测试。因此,我对test
目标的post-test-results
依赖。但是,为了运行我的测试,我可能需要编译它们。因此,test-compile
目标上的test
存在依赖关系。
为了编译我的测试,我依赖于常规Java代码。因此,test-compile
将取决于compile
。为了编译,我必须做好准备。也许这是建立必要的结构,或下载所需的罐子。那是在compile
之前调用的。现在,我可以部署。但是,在我可以部署之前,我需要打包我的部署。因此,deploy
取决于package
。
包本身取决于compile
,但我的compile-test
也是如此。由于我已经调用了compile
,因此我的package
目标不必这样做。它所要做的就是打包已编译的类文件。
因此,我可能会按此顺序执行以下目标:
我的all
目标确实击中了我的所有其他目标,但我没有必要将它们全部列为依赖项,或强制它们通过<antcall/>
进行构建。
看起来您需要了解Ant及其工作原理。您的示例Ant文件无效。 Ant使用XML样式结构。所有任务都是XML样式实体。
幸运的是,Ant上有很多好书。我建议Manning的Ant in Action作为一个很好的起点。
您将发现的一件事是您可以在单个<junit>
任务中指定批量的junit测试。这可以通过<batchtest>
任务上的一个或多个<junit>
子实体来完成。 <batchtest>
将运行符合特定条件的所有分类。您还可以在<test>
任务中使用<junit>
子实体。 <test>
子实体允许您指定要运行的单个类文件。很多时候,这些类文件可能只是调用一组指定的其他Junit分类。这样,开发人员可以指定要运行的测试和要跳过的测试。
您可以通过使用属性控制要运行或未运行的测试,而不是通过创建许多测试任务来控制。这允许您指定测试集,而不必生成多个JUnit进程。