我有一个名为 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,它仍然无效。
非常感谢任何提示
答案 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>
。