java.lang.NoClassDefFoundError在junit中
我在我的junittesting代码中得到这个错误在java中。 我在网上查了一下,它说我需要在类path中添加junit.jar。
在Eclipse中,我已经将它添加到“项目属性”窗口的类path中,但仍然出现初始化错误。 我该怎么办..?
这是错误的完整跟踪:
java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(Unknown Source) 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 org.junit.internal.builders.JUnit4Builder.runnerForClass(JUnit4Builder.java:13) at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57) at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29) at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57) at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:32) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.java:25) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:41) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:31) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 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) ... 25 more
- 在包浏览器中右键单击您的项目>单击属性
- 转到Java构buildpath>库选项卡
- 点击“添加库”button
- selectJUnit
- 点击下一步。
你应该能够从那里处理它。
- Eclipse – >顶部菜单 – >运行 – >运行configuration
- 删除所有您的testing的发生。 您的testing可能会显示为YourTest.Method_1()。 删除这个。
- 重新运行。 让Eclipse构build一个全新的configuration。
附录:本地我创build了一个“用户库”,并添加到我的项目中
hamcrest-core-1.3.jar
junit-4.12.jar
如果你从JUnit网站上下载了JUnit jar,但忘记下载Hamcrest jar的话,可能会出现同样的问题 – 这两个都是必需的(说明指出要下载,但是我跳过了!
在Maven中使用时,将工件junit:junit从4.8.2更新到4.11。
org / hamcrest / SelfDescribing类不在运行时类path中。
尝试以下步骤:
- 转到您的项目的运行configuration。 在Classpath选项卡中添加JUnit库。
- 重试相同的步骤。
它为我工作。
我有同样的问题,问题是在我的testing类@ContextConfiguration,我也加载的servlet上下文我只是改变:
@ContextConfiguration(locations = { "classpath*:**\*-context.xml", "classpath*:**\*-config.xml" })
至:
@ContextConfiguration(locations = { "classpath:**\*-context.xml", "classpath:**\*-config.xml" })
就是这样。 这种方式我只加载所有的文件模式* -context.xml在我的testingpath。
- 确保将环境variablesJUNIT_HOME设置为c:\ JUNIT。
- 然后在运行configuration>selectclasspath>添加外部jar子junit-4.11.jar
原因是“hamcrest-core”jar不在类path中,因为它不是直接与junit jar。 所以有两种方法可以解决这个问题:
- select项目 – > buildpath – >添加库并selectjunit(它包含junit和hamcrest-core)
- 从maven回购下载hamcrest-core,并将其添加到您的类path中。
如果在类path中存在两个版本的hamcrest-library或hamcrest-core,也会出现此错误。
在POM文件中,你可以排除额外的版本,它的工作原理。
甚至Junit4.11.jar也没有hamcrest-core.jar。 我在类path中显式添加,问题已解决。
如果你有不止一个版本的java,它可能会干扰你的程序。
我build议你下载JCreator。
当您这样做时,请单击configuration,选项和JDKconfiguration文件。 从列表中删除旧版本的Java。 然后点击播放button。 你的程序应该会出现。
如果没有,请按Ctrl + Alt + O,然后再次按播放button。