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