问题描述
我正在尝试使用JUnit进行黄瓜测试,并且出现java.lang.NoClassDefFoundError
异常.
I'm trying to run a cucumber test with JUnit and I'm getting java.lang.NoClassDefFoundError
exception.
JUnit代码:
package ctest;
import org.junit.runner.RunWith;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
@RunWith(Cucumber.class)
@CucumberOptions(
features = "Feature"
,glue={"stepDefinition"}
)
public class Runner {
}
例外:
java.lang.NoClassDefFoundError: gherkin/formatter/Formatter
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$100(Unknown Source)
at java.net.URLClassLoader$1.run(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 cucumber.runtime.formatter.PluginFactory$1.<init>(PluginFactory.java:53)
at cucumber.runtime.formatter.PluginFactory.<clinit>(PluginFactory.java:52)
at cucumber.runtime.RuntimeOptions.<init>(RuntimeOptions.java:69)
at cucumber.runtime.RuntimeOptionsFactory.create(RuntimeOptionsFactory.java:25)
at cucumber.api.junit.Cucumber.<init>(Cucumber.java:55)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104)
at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createUnfilteredTest(JUnit4TestLoader.java:84)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:70)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:43)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:444)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: java.lang.ClassNotFoundException: gherkin.formatter.Formatter
at java.net.URLClassLoader$1.run(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)
... 34 more
我已将以下Cucumber jar文件添加到Eclipse,并通过thi链接将cucumber插件添加至eclipse- http://cucumber.github.com/cucumber-eclipse/update-site .
I have added the below Cucumber jar files to Eclipse and added the cucumber plugin to eclipse from thi link - http://cucumber.github.com/cucumber-eclipse/update-site.
我在SE中发现了一些类似的问题,并尝试了其中提到的建议,但没有成功.我尝试按照以下链接中的建议将小黄瓜降级到较低的版本.但这并不能解决问题.
I found some similar questions in SE and tried the suggestions mentioned there but in vain. I tried downgrading gherkin to a lower version as suggested in the below links. But that doesn't fix the problem.
- 设置黄瓜测试时出现NoClassDefFoundError
- 线程"main"中的异常; java.lang.NoClassDefFoundError:gherkin/formatter/Formatter
- NoClassDefFoundError while setting up cucumber tests
- Exception in thread "main" java.lang.NoClassDefFoundError: gherkin/formatter/Formatter
以下问题的答案建议添加相同版本的黄瓜罐子文件.但是由于Maven存储库中可用的jar文件没有相同版本,因此我不确定如何/在何处可以下载所有黄瓜jar文件的相同版本.
Answers to below questions have suggested to add the same version of cucumber jar files. But since the jar files that are available in the Maven repositry itself doesn't have the same version, I'm not sure how/where can I download the same version of all cucumber jar files.
- Cucumber Exception: java.lang.ClassNotFoundException: cucumber.io.ResourceLoader
- how to solve NoClassDefFoundError in cucumber test
非常感谢您提供解决此问题的帮助.
Any help to fix this issue is much appreciated.
推荐答案
根据此, cucumber-java-1.2.4 需要 gherkin-2.12.2 ,而您要提供 gherkin-4.0. 0 .
According to this, cucumber-java-1.2.4 requires gherkin-2.12.2, while you are providing gherkin-4.0.0.
您可以从此处下载版本2.12.2,删除版本4.0.0,然后查看它是否有效(您可能需要重新启动Eclipse).
You can download version 2.12.2 from here, remove version 4.0.0 and see if it works then (you may need to restart Eclipse).
这篇关于使用JUnit运行黄瓜测试时出现java.lang.NoClassDefFoundError异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!