java - Ant + JUnit : NoClassDefFoundError

标签 java ant junit classpath hamcrest

好吧,我很沮丧!我已经四处搜寻了好几个小时,但仍然很困惑。

环境:WinXP、Eclipse Galileo 3.5(直接安装 - 无需额外插件)。

所以,我有一个简单的 JUnit 测试。它从它的内部 Eclipse JUnit 运行配置中运行良好。这个类不依赖任何东西。为了尽可能缩小这个问题,它只包含:

@Test
public void testX() {
    assertEquals("1", new Integer(1).toString());
}

到目前为止没有出汗。现在我想采取超高级的步骤,在 Ant 中运行这个测试用例(最终目标是与 Hudson 集成)。

所以,我创建了一个 build.xml:

<project name="Test" default="basic">
    <property name="default.target.dir" value="${basedir}/target" />
    <property name="test.report.dir" value="${default.target.dir}/test-reports" />

    <target name="basic">
        <mkdir dir="${test.report.dir}" />
        <junit fork="true" printSummary="true" showOutput="true">
            <formatter type="plain" />
            <classpath>
                <pathelement path="${basedir}/bin "/>
            </classpath>
            <batchtest fork="true" todir="${test.report.dir}" >
                <fileset dir="${basedir}/bin">
                    <include name="**/*Test.*" />
                </fileset>
            </batchtest>
        </junit>
    </target>
</project>

${basedir} 是工作区中包含源、类和构建文件的 Java 项目名称。所有 .java 和 build.xml 都在 ${basedir}/src 中。 .class 文件位于 ${basedir}/bin 中。

我已通过 Windows/Preferences/Ant/Runtime/Contributed Entries 将 eclipse-install-dir/plugins/org.junit4_4.5.0.v20090423/junit.jar 添加到 Ant Runtime Classpath 中。 ant-junit.jar 在 Ant Home Entries 中。

那么,当我运行这个极其复杂的目标时会发生什么?我的报告文件包含:

Testsuite: com.xyz.test.RussianTest
Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec

Testcase: initializationError took 0 sec
Caused an ERROR
org/hamcrest/SelfDescribing
java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$000(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    Caused by: java.lang.ClassNotFoundException: org.hamcrest.SelfDescribing
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)

这个 org.hamcrest.SelfDescribing 类是什么?和mock有关系吗?好的。但是为什么依赖呢?我什么也没做。这实际上是一个 Java 项目,除了 JUnit 之外没有其他依赖项。

难倒(和沮丧)!!

最佳答案

我下载了 JUnit 4.7 并将 junit-4.7.jar 放在我的构建路径中(而不是旧版本)。那解决了它。我没碰 Ant 。

关于java - Ant + JUnit : NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1171264/

相关文章:

java - 有哪些好的 Java 库可以从网页中搜索和抓取数据。

java - 计算我的工作线程仍在处理时所花费的时间

Java:如何使用自定义 Ant build.xml 将 ProGuard 集成到 Jar 项目中

java - 发布构建 jnativehook

ant - 如何在 Intellij Idea 上打开 Ant 项目(Nutch Source)?

java - 如何使用@SpringBootTest验证一个作业是否运行另一个作业

java - Jackson 通用 json 到 List<T> 转换器方法不起作用

JavaFX - 为什么 ChoiceBoxes 参数化?

java - 另一个 Ant + JUnit 类路径问题

java - 如何使用 Mockito 和 catch-Exception 断言 void 方法抛出异常?