从包含jar文件的Apache Ant运行JUnit导致"未找到JUnitTask"

时间:2016-05-24 08:52:13

标签: java junit ant build.xml

我正在使用Apache Ant来编译和运行JUnit测试。目前,它正在开发安装ant JUnit库作为Ant的一部分的环境,但不在其他环境中。我想解决这个问题。我尝试过包含所需的罐子(junit-4.12.jarhamcrest-core-1.3.jar,如果我理解正确的话),但它不起作用。我build.xml的相关部分如下:

  <property name="build.path" location="build/src"/>
  <property name="build.test.path" location="build/test"/>
  <property name="lib.path.rel" value="lib"/>
  <property name="junit.file" value="${lib.path.rel}/junit/junit-4.12.jar"/>
  <property name="hamcrest.file" value="${lib.path.rel}/junit/hamcrest-core-1.3.jar"/>

  <path id="junit.class.path">
    <pathelement location="${junit.file}"/>
    <pathelement location="${hamcrest.file}"/>
    <pathelement location="${build.path}"/>
  </path>

  <target name="test-compile" depends="test-clean">
    <mkdir dir="${build.test.path}"/>

    <javac srcdir="${test.path}"
           destdir="${build.test.path}"
           includeantruntime="false">
      <classpath refid="junit.class.path" />
    </javac>
  </target>

  <target name="test" depends="test-compile">
    <junit>
      <classpath>
        <path refid="junit.class.path"/>
        <pathelement location="${build.test.path}"/>
      </classpath>
      <batchtest>
        <fileset dir="${build.test.path}">
          <include name="**/*Test*"/>
        </fileset>
      </batchtest>
      <formatter type="brief" usefile="false"/>
    </junit>
  </target>

任务test-compile成功构建测试 但是,任务test会导致以下错误:
Problem: failed to create task or type junit Cause: the class org.apache.tools.ant.taskdefs.optional.junit.JUnitTask was not found.

我正在使用带有Ant 1.9.2的CentOS 7,尽管我认为请求用户将Ant更新为可用的最新版本是合理的,但我无法控制他们安装的操作系统和库。因此,我希望不是通过yum install something或诸如此类的方法解决问题,而是通过找到正确使用JUnit jar文件的方法(如果可能的话)。然后,当他们拉动git存储库并运行任务时,它将适用于任何操作系统或环境(因为他们将使用他们刚刚提取的jar文件)。显然,这也意味着&#34;只需将罐子放入Ant lib dir&#34;不会是一个可行的解决方案 谢谢。

1 个答案:

答案 0 :(得分:1)

要修复此错误,您必须传递给定义JUnitTask的jar。这个jar被称为ant-junit.jar,您可以(来自JUnit task documentation):

  1. 将junit.jar和ant-junit.jar放在ANT_HOME / lib中。
  2. 不要将它们放在ANT_HOME / lib中,而是将它们的位置包含在CLASSPATH环境变量中。
  3. 使用-lib将两个JAR添加到类路径中。
  4. 使用构建文件中<classpath>中的<taskdef>元素指定两个JAR的位置。
  5. 将ant-junit.jar保留在ANT_HOME / lib的默认位置,但在传递给的包含junit.jar。 (自Ant 1.7起)
  6. 对于选项4,您只需添加一个声明,如:

    <taskdef name="junit" classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask">
      <classpath>
        <pathelement location="${lib}/ant-junit.jar"/>
        <pathelement location="${lib}/ant-junit4.jar"/>
      </classpath>
    </taskdef>