我有一个当前私有的Java项目,我正在努力使其成形,供其他开发人员使用。我想要做的一件事是让Ant自己下载JUnit、PMD和FindBugs这样的东西所需的JAR,这样开发者就不用自己安装了。因此,我已经为所有这些事情卸载了RPM包(以确保我使用的是常春藤下载的版本),我让Ivy能够很好地下载与JUnit相关的JAR文件。然而,我遇到了两个(可能相关的)问题:
1)如果我为taskdef任务添加了一个junit,就会得到警告Trying to override old definition of datatype junit。但是,如果我不这样做,我就会得到错误:
failed to create task or type junit
Cause: the class org.apache.tools.ant.taskdefs.optional.junit.JUnitTask was not found.2)当我重写junit taskdef时,当我试图运行JUnit测试时,会得到这个错误:
junit.framework.AssertionFailedError: No tests found搜索该错误时表示,它发生在运行在4.x下时为JUnit 3.x编写的测试中。但是,我的JUnit测试都使用4.x @Test进行测试,当我使用RPM包提供的JUnit 4.11 JAR文件时,测试运行得很好,Ivy下载的JUnit JAR文件分别是JUnit的4.11版本和ant-junit的1.9.4版本。我使用的已安装的RPM包(1.9.2)与Ivy下载的Ant JAR文件(1.9.4)不匹配,但我认为这不是问题所在。
我的junit任务是:
<taskdef name="junit"
classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask">
<classpath location="lib/ant-junit.jar"/>
<classpath location="lib/junit.jar"/>
<classpath location="lib/hamcrest-core.jar"/>
</taskdef>在打开调试的情况下运行Ant会产生与此问题相关的输出:
Finding class org.apache.tools.ant.taskdefs.optional.junit.JUnitTask
Loaded from /BlahBlah/lib/ant-junit.jar org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.class
Class org.apache.tools.ant.Task loaded from parent loader (parentFirst)
Class org.apache.tools.ant.taskdefs.optional.junit.JUnitTask loaded from ant loader (parentFirst)
[...]
Class org.apache.tools.ant.util.FileUtils loaded from parent loader (parentFirst)
Could not load class (org.apache.tools.ant.taskdefs.optional.junit.JUnitTask) for type junit
Could not load class (org.apache.tools.ant.taskdefs.optional.junit.JUnitTask) for type junit
Trying to override old definition of datatype junit
+Datatype junit org.apache.tools.ant.taskdefs.optional.junit.JUnitTask有什么办法能解决这个问题吗?还是我应该采取完全不同的方法?
发布于 2014-10-15 20:25:50
我建议使用常春藤配置来管理您的测试类路径。下面的示例包含一个工作示例:
您的常春藤文件包含一个依赖项,其配置映射为"test":
<configurations>
<conf name="compile" description="Required to compile application"/>
<conf name="runtime" description="Additional run-time dependencies" extends="compile"/>
<conf name="test" description="Required for test only" extends="runtime"/>
</configurations>
<dependencies>
..
..
<!-- test dependencies -->
<dependency org="junit" name="junit" rev="4.11" conf="test->default"/>
</dependencies>构建文件创建一个使用常春藤配置填充的类路径:
<target name="resolve" depends="...." description="Use ivy to resolve classpaths">
..
..
<ivy:cachepath pathid="test.path" conf="test"/>
</target>最后,junit任务使用这个类路径。
<target name="test" depends="compile-tests" description="Run unit tests">
..
..
<junit printsummary="yes" haltonfailure="yes">
<classpath>
<path refid="test.path"/>
<pathelement path="${classes.dir}"/>
<pathelement path="${test.classes.dir}"/>
</classpath>
..
..
</junit>
</target>https://stackoverflow.com/questions/26375186
复制相似问题