我有一些 junit 测试(在测试器应用程序中),我想在服务上运行(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 中运行 Service.jar(fork="no"),如果可能的话,因为 ant 不允许我(无法在非 fork 中执行 jar模式。请设置 fork='true'。)
如有任何帮助,我们将不胜感激。谢谢
最佳答案
默认情况下,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 命令继续处理。
关于非 fork 的 jar 执行 - 如果指定 classpath
和 classname
属性,则可以避免 fork 。
关于运行 Jar 后 Java Ant 无法完成任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20059286/