[英]Error NoClassDefFoundError while running Junit test
When I run this script to automate:当我运行此脚本以自动化时:
package testRunners; import org.junit.runner.RunWith; import io.cucumber.junit.Cucumber; import io.cucumber.junit.CucumberOptions; @RunWith(Cucumber.class) @CucumberOptions(features="resources/features", glue="") public class TestRunner_GoogleHomepage { }
I use:我用:
I obtain this error result in Java track trace console:我在 Java 跟踪控制台中获得此错误结果:
java.lang.NoClassDefFoundError: io/cucumber/plugin/event/EventPublisher
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 java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
at java.lang.Class.getConstructor0(Unknown Source)
at java.lang.Class.getConstructor(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:90)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:76)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:49)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:526)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:770)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:464)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:210)
Caused by: java.lang.ClassNotFoundException: io.cucumber.plugin.event.EventPublisher
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)
... 29 morec
I use:
我用:
cucumber-core-5.7.0.jar cucumber-java-5.7.0.jar cucumber-junit-5.7.0.jar cucumber-jvm-deps-1.0.6.jar gherkin-8.2.1.jar junit-4.12.jar
It would appear that you are manually downloading jar files.您似乎正在手动下载 jar 文件。 This is not a practice I would recommend.
这不是我推荐的做法。 If you follow the 10 minute tutorial you'll get an introduction that uses Maven dependency management.
如果您按照10 分钟的教程进行操作,您将获得使用 Maven 依赖管理的介绍。
In addition to this tutorial I would strongly urge you to invest time in learning either Maven or Gradle along with Cucumber.除了本教程之外,我强烈建议您花时间学习 Maven 或 Gradle 以及 Cucumber。 Amongst other things these tools will automate your dependency management and this can make your life much easier.
除其他外,这些工具将自动化您的依赖管理,这可以让您的生活更轻松。
For example:例如:
If you want to use Cucumber with JUnit 4 and annotation based step definitions you would declare this minimal set of dependencies in a Maven pom.xml
file. If you want to use Cucumber with JUnit 4 and annotation based step definitions you would declare this minimal set of dependencies in a Maven
pom.xml
file.
<properties>
<cucumber.version>5.7.0</cucumber.version>
</properties>
<dependencies>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>${cucumber.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>${cucumber.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
By telling Maven what your dependencies are Maven can calculate your transitive dependencies ie: the dependencies of your dependencies.通过告诉 Maven 你的依赖是什么 Maven 可以计算你的传递依赖,即:你的依赖的依赖。
This has many advantages.这有很多优点。 One example would be using the
mvn dependency:tree
command to list all dependencies.一个示例是使用
mvn dependency:tree
命令列出所有依赖项。 This is much faster and much less error prone then downloading jar files by hand and hoping that you have the right ones.这比手动下载 jar 文件并希望您拥有正确的文件要快得多且不易出错。
$ mvn dependency:tree
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------< cucumber:cucumber-java-skeleton >-------------------
[INFO] Building Cucumber-Java Skeleton 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ cucumber-java-skeleton ---
[INFO] cucumber:cucumber-java-skeleton:jar:0.0.1
[INFO] +- io.cucumber:cucumber-java:jar:5.7.0:test
[INFO] | +- io.cucumber:cucumber-core:jar:5.7.0:test
[INFO] | | +- io.cucumber:cucumber-gherkin:jar:5.7.0:test
[INFO] | | +- io.cucumber:cucumber-gherkin-vintage:jar:5.7.0:test
[INFO] | | +- io.cucumber:tag-expressions:jar:2.0.4:test
[INFO] | | +- io.cucumber:cucumber-expressions:jar:8.3.1:test
[INFO] | | +- io.cucumber:datatable:jar:3.3.0:test
[INFO] | | +- io.cucumber:cucumber-plugin:jar:5.7.0:test
[INFO] | | \- io.cucumber:docstring:jar:5.7.0:test
[INFO] | \- org.apiguardian:apiguardian-api:jar:1.1.0:test
[INFO] +- io.cucumber:cucumber-junit:jar:5.7.0:test
[INFO] \- junit:junit:jar:4.13:test
[INFO] \- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.781 s
[INFO] Finished at: 2020-02-10T23:00:14+01:00
[INFO] ------------------------------------------------------------------------
I believe that below dependency is missing.我相信缺少以下依赖项。 Could you please add the below dependency in your project.
您能否在您的项目中添加以下依赖项。 Version must be same as the other cucumber dependencies.
版本必须与其他 cucumber 依赖项相同。
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-plugin</artifactId>
<version>5.7.0</version>
</dependency>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.