How to solve “Cause: the class org.apache.tools.ant.taskdefs.optional.junit.JUnitTask was not found.” while running “ant test”?

烈酒焚心 提交于 2019-12-18 14:05:31

问题


I have a target named test and I want to do some tests.

I put here the important parts in build.xml. It includes:

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

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

And I have put the junit.jar and ant-junit.jar(is it a must?) in the lib directory.

However, if I run

ant test.

The output error is:

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

Additionally, if I put the two jar files in /usr/share/ant/lib with the $ANT_HOME set, it still does not work.

Really thanks for any hints


回答1:


In my case (using Mint, based on Debian)

sudo apt-get install ant-optional

was the only thing that worked.




回答2:


The issue was solved on RHEL-based systems once ant-junit was installed:

$ sudo yum install ant-junit



回答3:


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

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

this has nothing to do with Ant classpath itself. It is properties you can use in your tasks. You have to put jars to the suggested dirs or add command line argument.

Try running it like this:

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



回答4:


I was seeing this message because I had missed to include the ant-junit.jar from my IDE's Classpath, e.g. in Eclipse > Right click on your project > Run as > Run Configurations.. > Classpath (tab) > Ensure the ant-junit.jar is there.




回答5:


When you run JUnit tasks, you must make sure both your classpath that was used for your builds, and the path for the junit jars are added to your classpath.

I prefer to put the junit jars inside my project, so others don't have to install them in their machines for my build to work. I would install them in ${basedir}/antlib/junit

I use ${basedir}/antlib to store all the various Ant build related jars such as the Ant-Contrib jars, JaCoCo, Findbugs, etc. Since this is inside my project, a checkout will always include these jars and the build will work for everyone:

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

This will create a path that contains your JUnit jars. Now to compile your junit tests:

<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-->

Note that placing the JUnit jars in $ANT_HOME/lib main not work because it depends whether <javac> has includeAntRuntime set or not. It's always highly recommended not to have this set in order to make your build more platform independent.

Also remember to include that junit.path in your <junit> task too.



来源:https://stackoverflow.com/questions/6568634/how-to-solve-cause-the-class-org-apache-tools-ant-taskdefs-optional-junit-juni

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!