我得到了一些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'。)
任何帮助将不胜感激。感谢
答案 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执行 - 如果指定classpath
和classname
属性,则可以避免分叉。