Java Ant在运行Jar后不会完成任务

时间:2013-11-18 22:27:54

标签: java ant junit4

我得到了一些junit测试(在Tester App中),我想在服务上运行(并行运行Service.jar)。一旦ant运行Service.jar,它就不会按预期返回执行junit测试,而只是在那里运行Service应用程序。难道我做错了什么?我的build.xml如下所示..

<target name="compile" depends="clean">
    <javac srcdir="${srcdir}" destdir="${testdir}" 
     verbose="${full-compile}">
        <classpath refid="classpath.test"/>
    </javac>
</target>
<target name="test" depends="compile,run">
    <junit fork="no" haltonfailure="yes">
        <classpath refid="classpath.test" />
        <formatter type="brief" usefile="false" />
        <test name="xyz.Tester.Test1" outfile="result" >
            <formatter type="plain"/>
            <formatter type="xml"/>
        </test>
    </junit>
</target>
<target name="run">
    <java jar="Service.jar" fork="yes">
    </java>
</target>

此外,我想知道是否有一种方法可以在Ant(fork =“no”)内运行Service.jar,如果有可能,因为ant不会让我(不能在非分叉中执行jar)模式。请设置fork ='true'。)

任何帮助将不胜感激。感谢

1 个答案:

答案 0 :(得分:3)

默认情况下,ant任务按顺序执行。当您需要并行运行某些内容时,您需要明确使用任务parallel - 请参阅其文档中的示例 - 例如:

...
<parallel>
  <java jar="Service.jar" fork="yes"/>
  <sequential>
    <sleep seconds="30"/>
    <junit fork="true" forkmode="once" ... >
    <java jar="ServiceStopper.jar" fork="yes"/>
  </sequential>
</parallel>
...

或者,您可以使用java任务上的spawn属性。它导致您的服务在单独的进程中生成,并继续处理下一个ant命令。

关于非分叉jar执行 - 如果指定classpathclassname属性,则可以避免分叉。