web-dev-qa-db-ja.com

JUnitを使用してキュウリテストを実行しているときにjava.lang.NoClassDefFoundError例外

JUnitでキュウリのテストを実行しようとしていますが、Java.lang.NoClassDefFoundError例外。

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に追加し、cucumberプラグインをリンクから http://cucumber.github.com/cucumber-Eclipse/update-site からEclipseに追加しました。

enter image description here

私はSEでいくつかの同様の質問を見つけ、そこで言及されている提案を試みましたが無駄でした。以下のリンクで提案されているように、ガーキンをより低いバージョンにダウングレードしてみました。しかし、それは問題を解決しません。

以下の質問に対する回答は、同じバージョンのキュウリのjarファイルを追加することを提案しています。しかし、Mavenリポジトリー自体で使用可能なjarファイルには同じバージョンがないため、すべてのキュウリのjarファイルの同じバージョンをどこでどのようにダウンロードできるかわかりません。

この問題を修正するための助けは大歓迎です。

8
justcurious

this によると、cucumber-Java-1.2.4にはgherkin-2.12が必要です。 2、提供中gherkin-4.0.0

here からバージョン2.12.2をダウンロードし、バージョン4.0.0を削除して、それが機能するかどうかを確認できます(Eclipseの再起動が必要になる場合があります)。

9
Kiril S.