Java 使用Ivy下载JUnit供Ant使用
我有一个目前私有的Java项目,我正在努力使其成型,以供其他开发人员使用。我试图做的一件事是让Ant自己下载JUnit、PMD和FindBugs所需的JAR,这样开发者就不必自己安装它了。所以我已经为所有这些东西卸载了RPM包(以确保我使用的是Ivy下载的版本),并且Ivy可以很好地下载JUnit相关的JAR文件。然而,我有两个(可能相关的)问题: 1) 如果我为Java 使用Ivy下载JUnit供Ant使用,java,ant,junit,ivy,Java,Ant,Junit,Ivy,我有一个目前私有的Java项目,我正在努力使其成型,以供其他开发人员使用。我试图做的一件事是让Ant自己下载JUnit、PMD和FindBugs所需的JAR,这样开发者就不必自己安装它了。所以我已经为所有这些东西卸载了RPM包(以确保我使用的是Ivy下载的版本),并且Ivy可以很好地下载JUnit相关的JAR文件。然而,我有两个(可能相关的)问题: 1) 如果我为junit任务输入taskdef,我会收到警告试图覆盖数据类型junit的旧定义。但是,如果我不这样做,我会得到错误: failed
junit
任务输入taskdef
,我会收到警告试图覆盖数据类型junit
的旧定义。但是,如果我不这样做,我会得到错误:
failed to create task or type junit
Cause: the class org.apache.tools.ant.taskdefs.optional.junit.JUnitTask was not found.
2) 当我重写junittaskdef时,在尝试运行junit测试时会出现以下错误:
junit.framework.AssertionFailedError: No tests found
搜索该错误表示,在4.x下运行时,为JUnit3.x编写的测试会发生这种情况。然而,我的JUnit测试都使用4.x@Test
的测试方式,当我使用RPM包提供的JUnit 4.11 JAR文件时,测试运行得很好,Ivy下载的JUnit JAR文件对于JUnit是4.11版本,对于ant JUnit是1.9.4版本。我使用的Ant安装的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>
那么,有没有办法解决这个问题?或者我应该采取完全不同的方法?我建议使用常春藤配置来管理您的测试类路径。以下示例包含一个工作示例:
..
..
生成文件将创建使用ivy配置填充的类路径:
<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>
..
..
..
..
我试过了,但没用。我知道pathid
设置正确,因为我可以将is用于taskdef
中的类路径。
<target name="resolve" depends="...." description="Use ivy to resolve classpaths">
..
..
<ivy:cachepath pathid="test.path" conf="test"/>
</target>
<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>