如何在我的Ant构建脚本中运行JUnit测试,同时从生成的jar中省略测试类?

我正在使用Ant手册中的Hello World with Ant教程来了解Ant。

本教程的最后一部分涉及将JUnit测试添加到项目中。

我已按照教程中的描述完成所有工作,现在我正在进行一些小的更改。

我想做的一个改变是在典型的构建期间运行测试,但没有* Test.class文件最终在应用程序的最终.jar文件中。 这是因为我将要开发的最终项目将用于硬盘空间有限的设备,并且仅支持Java SDK的一个子集,因此我更愿意完全从jar中省略这些测试文件。

我该怎么做呢?

创建两个独立的jar子很容易,一个用于测试,一个用于部署,但这似乎不太理想。

我当前的build.xml文件如下。

                                                           

我尝试过的一件事是修改jar命令以排除* Test.class文件

 ...  ... 

哪个成功排除了测试类,但是当测试通过junit目标运行时,当使用-v运行时,它会失败并显示以下堆栈跟踪:

 [LocalPath]\build.xml:44: Test HelloWorldTest failed at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.actOnTestResult(JUnitTask.java:1863) at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.execute(JUnitTask.java:814) at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.executeOrQueue(JUnitTask.java:1808) at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.execute(JUnitTask.java:760) at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291) at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) at org.apache.tools.ant.Task.perform(Task.java:348) at org.apache.tools.ant.Target.execute(Target.java:390) at org.apache.tools.ant.Target.performTasks(Target.java:411) at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1397) at org.apache.tools.ant.Project.executeTarget(Project.java:1366) at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) at org.apache.tools.ant.Project.executeTargets(Project.java:1249) at org.apache.tools.ant.Main.runBuild(Main.java:801) at org.apache.tools.ant.Main.startAnt(Main.java:218) at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280) at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109) 

你能改变:

         

至:

                       

这应该排除我相信最终JAR文件的Test类。

nb每个任务的依赖关系的变化。

基于@ Jon的建议,我将junit目标更改为针对build / classes文件夹而不是jar运行,并相应地更新了依赖项。

我更新的build.xml文件如下: