如何解决“原因:找不到类org.apache.tools.ant.taskdefs.optional.junit.JUnitTask。”在运行“蚂蚁测试”?

时间:2011-07-04 07:43:52

标签: ant junit

我有一个名为 test 的目标,我想做一些测试。

我在这里放了 build.xml 中的重要部分。它包括:

<property name='lib.dir' value='lib' />

<path id='classpath'>
     <fileset dir="${lib.dir}" includes="**/*.jar" />
</path>

我已将 junit.jar ant-junit.jar (它是必须的吗?)放在 lib 目录中。

但是,如果我跑

ant test

输出错误是:

test:

BUILD FAILED
/home/xiaohan/EclipseWorkSpace/AntTest/build.xml:82: Problem: failed to create task or type junit
Cause: the class org.apache.tools.ant.taskdefs.optional.junit.JUnitTask was not found.
        This looks like one of Ant's optional components.
Action: Check that the appropriate optional JAR exists in
        -/usr/share/ant/lib
        -/home/xiaohan/.ant/lib
        -a directory added on the command line with the -lib argument

Do not panic, this is a common problem.
The commonest cause is a missing JAR.

This is not a bug; it is a configuration problem

此外,如果我将两个jar文件放在 / usr / share / ant / lib 中并设置了$ ANT_HOME,它仍然无效。

非常感谢任何提示

5 个答案:

答案 0 :(得分:30)

在我的情况下(使用Mint,基于Debian)

sudo apt-get install ant-optional

是唯一有效的方法。

答案 1 :(得分:16)

安装ant-junit后,基于RHEL的系统解决了这个问题:

$ sudo yum install ant-junit

答案 2 :(得分:4)

<property name='lib.dir' value='lib' />

<path id='classpath'>
    <fileset dir="${lib.dir}" includes="**/*.jar" />
</path>

这与Ant类路径本身无关。它是您可以在任务中使用的属性。您必须将jar放入建议的目录或添加命令行参数。

尝试像这样运行:

ant -lib /path/to/the/ant-junit.jar/ test

答案 3 :(得分:1)

我看到了这条消息,因为我错过了从IDE的Classpath中包含ant-junit.jar,例如在Eclipse&gt;右键单击您的项目&gt;以&gt;运行运行配置..&gt; Classpath(tab)&gt;确保ant-junit.jar在那里。

答案 4 :(得分:0)

运行JUnit任务时,必须确保将用于构建的classpath和junit jar的路径添加到类路径中。

我更喜欢将junit jars放在我的项目中,所以其他人不必在他们的机器中安装它们以便我的构建工作。我会在${basedir}/antlib/junit

中安装它们

我使用${basedir}/antlib存储所有各种Ant构建相关的jar,例如Ant-Contrib jar,JaCoCo,Findbugs等。由于这是在我的项目中,结帐将始终包含这些jar和构建将适用于所有人:

 <classpath id="junit.path">
    <fileset dir="${basedir}/antlib/junit"/>
</classpath>

这将创建一个包含JUnit jar的路径。现在编译你的junit测试:

<javac dest="${target.dir}/test-classes"
   src=${src.test.java}">
   <classpath refid="javac.classpath"/>   <!-- Your main build classpath -->
   <classpath refid="junit.path"/>        <!-- Your JUnit classpath -->
   <classpath path="${main.destdir}"/>    <!-- These the classes you've built-->

请注意,将{JUnit jars放置在$ANT_HOME/lib main中不起作用,因为它取决于<javac>是否设置了includeAntRuntime。我们强烈建议不要使用此设置,以使您的构建更加独立于平台。

另外请记住在您的junit.path任务中加入<junit>