Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Ivy下载JUnit供Ant使用_Java_Ant_Junit_Ivy - Fatal编程技术网

Java 使用Ivy下载JUnit供Ant使用

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

我有一个目前私有的Java项目,我正在努力使其成型,以供其他开发人员使用。我试图做的一件事是让Ant自己下载JUnit、PMD和FindBugs所需的JAR,这样开发者就不必自己安装它了。所以我已经为所有这些东西卸载了RPM包(以确保我使用的是Ivy下载的版本),并且Ivy可以很好地下载JUnit相关的JAR文件。然而,我有两个(可能相关的)问题:

1) 如果我为
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文件包含一个依赖项,该依赖项的配置映射为“测试”:


..
..
生成文件将创建使用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>