首页 > 解决方案 > java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribeing 尽管类路径上有 hamcrest

问题描述

尝试通过 Antjunitlauncher任务使用 JUnit 5 运行测试时,我收到以下消息:

[junitlauncher] 警告:ID 为“junit-jupiter”的 TestEngine 无法执行测试 [junitlauncher] java.lang.NoClassDefFoundError:org/hamcrest/SelfDescribeing

我该如何解决这个问题,以便我的测试可以运行?

类似问题的答案(例如这个)主要是说要确保 hamcrest 在类路径上。我已经使用print-test-classpath目标(有关详细信息,请参阅下面的构建文件)验证了我用来运行测试的类路径包括hamcrest-2.1.jar. 此外,测试编译没有任何问题。

以下是我认为相关的 build.xml 部分:

<path id="lib-only-class.path">
  <fileset dir="${lib.dir}">
    <include name="**/*.jar" />
  </fileset>
</path>

<path id="class.path">
  <path refid="lib-only-class.path"/>
  <pathelement location="${classes.dir}"/>
</path>

<path id="test-class.path">
  <path refid="class.path"/>
  <pathelement location="${test-classes.dir}"/>
</path>

<target name="compile-tests" depends="compile">
  <mkdir dir="${test-classes.dir}"/>
  <javac srcdir="${test.dir}" destdir="${test-classes.dir}"
         includeantruntime="no" classpathref="class.path"/>
</target>

<target name="test" depends="compile-tests">
  <junitlauncher printsummary="yes">
    <classpath refid="test-class.path"/>
    <testclasses>
      <fileset dir="${test-classes.dir}"/>
    </testclasses>
  </junitlauncher>
</target>

<target name="print-test-classpath">
  <pathconvert property="classpathInName" refid="test-class.path"/> 
  <echo>Classpath is ${classpathInName}</echo>
</target>

标签: javaantjunit5hamcrest

解决方案


推荐阅读