ant多个目标执行

Guy*_*ond 0 ant junit

我的目标很少,我需要执行.我创建了一个目标,命名所有这些,但我认为这不是这样做的方法吗?以下是调用所有其他目标的目标运行:

<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>
Run Code Online (Sandbox Code Playgroud)

它没有运行,我这样做是为了得到报告而我什么都没得到?怎么了 ?从我读到的,antcall就像一个不好的goto循环.我想打电话给测试.

- >以下是我想要执行的所有测试:

  • 在里面
  • 清洁
  • AdministrationCtrl.Rollback
  • AdministrationCtrl.LatestInstallation
  • AdministrationCtrl.BackupiControl,
  • AdministrationCtrl.ChangeService
  • AdministrationCtrl.DefaultSetting
  • AdministrationCtrl.InitFailOver
  • AdministrationCtrl.RunDensite2Service
  • AdministrationCtrl.RunDensiteService
  • AdministrationCtrl.RunGSMService
  • AdministrationCtrl.RunLoudnessAnalyzerService
  • AdministrationCtrl.RunLoudnessLoggerService
  • AdministrationCtrl.RunRouterManagerService
  • AdministrationCtrl.RunttyR0Service
  • AdministrationCtrl.RunVirtualService
  • AdministrationCtrl.RestoreBkp

但这可能更通用(关于我将在Silk4J中添加的测试).有没有办法更通用?

Dav*_* W. 5

在我之后重复:

Ant不是一种编程语言.它是一种依赖矩阵语言.

这是一个重要的区别.你不告诉Ant要执行什么.你告诉Ant你需要什么,Ant会弄明白该怎么做.

我可以告诉你在解决所有这些问题时遇到问题<antcall/>.这是禁忌,因为它可以让你不止一次执行任务.您的构建文件也没有意义.

使用目标的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>
Run Code Online (Sandbox Code Playgroud)

当我想运行目标时all,我主要是指我想做一个干净的构建,发布我的测试结果,并部署构建.Makefiles也是如此.我没有列出我的所有任务.我为什么要关心我的编写准备工作?这不是我关心的问题.

所以我呼吁,all以及将调用clean,post-test-resultsdeploy.除了调用这三个目标之外,我不知道Ant会做什么.

等等......发布测试结果需要做什么?好吧,我可能需要运行我的测试.因此,我依赖test于我的post-test-results目标.但是,为了运行我的测试,我可能需要编译它们.所以,依赖test-compile于我的test目标.

为了编译我的测试,我依赖于常规Java代码.所以,test-compile将取决于compile.为了编译,我必须做好准备.也许这是建立必要的结构,或下载所需的罐子.以前叫过compile.现在,我可以部署.但是,在我可以部署之前,我需要打包我的部署.所以,deploy取决于package.

包装本身取决于compile,但我的也是如此compile-test.因为我已经打过电话compile,所以我的package目标不必这样做.它所要做的就是打包已编译的类文件.

因此,我可能会按此顺序执行以下目标:

  • 清洁
  • 准备
  • 测试编译
  • 后测试结果
  • 部署

我的all目标确实击中了我的所有其他目标,但我不必将它们全部列为依赖项或强制它们通过<antcall/>s 构建.

看起来您需要了解Ant及其工作原理.您的示例Ant文件无效.Ant使用XML样式结构.所有任务都是XML样式实体.

幸运的是,Ant上有很多好书.我会推荐Manning的Ant in Action作为一个很好的起点.

您将发现的一件事是您可以在单个<junit>任务中指定批量的junit测试.这可以通过任务上的一个或多个<batchtest>子实体来<junit>完成.在<batchtest>将运行匹配特定条件的所有进行分类.您还可以<test><junit>任务上使用子实体.在<test>子实体允许你指定个别的类文件运行.很多时候,这些类文件可能只是调用一组指定的其他Junit分类.这样,开发人员可以指定要运行的测试和要跳过的测试.

您可以通过使用属性控制要运行或未运行的测试,而不是通过创建许多测试任务来控制.这允许您指定测试集,而不必生成多个JUnit进程.