线程“main”中的exceptionjava.lang.NoClassDefFoundError:org / openqa / selenium / WebDriver

我在我的pom.xml中添加了最新的Selenium依赖项

 org.seleniumhq.selenium selenium-java 3.7.1  

我用我的pom.xml在目录中运行了mvn clean install,我还根据Selenium文档在我的app类中导入了正确的类

 import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; 

但是当我尝试运行我的main方法时,我收到以下错误

 Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/WebDriver 

我查看〜/ .m2 / repository文件夹,我没有看到openqa文件夹,但我看到了seleniumhq文件夹。

为什么没有maven安装openqa文件夹,为什么文档说从org.openqa导入…当我的jar存储库中永远不存在。 我很困惑,我只是希望能够在我的本地存储库中成功导入selenium Webdriver。

  • org.openqa.seleniumseleniumhq\selenium\selenium-api文件夹下selenium-api-{version}.jar的包。
  • org.openqa.selenium.firefoxseleniumhq\selenium\selenium-firefox-driver文件夹下的selenium-firefox-driver-{version}.jar的软件包。

所以没有openqa文件夹,它只是seleniumhq文件夹下的包名,你应该检查一下这些jar。

没有项目结构和代码细节,很难说是什么导致NoClassDefFoundErrorexception。 该exception与ClassNotFoundException 。 也许这个答案https://stackoverflow.com/a/5756989/5374508会有所帮助。

您使用的是IDE还是在命令行中工作? 例如,在Eclipse中,您可以通过右键单击项目,转到Maven菜单项然后选择“更新项目”来强制下载所有依赖项。 然后选中“强制更新快照/版本”复选框。

如果从命令行打开,请执行以下操作:

 mvn clean install -U 

从您的项目路径。

你只有selenium-java依赖。 要使用完整function,您需要导入所有selenium依赖项

    org.seleniumhq.selenium selenium-chrome-driver ${selenium.version}    org.seleniumhq.selenium selenium-java ${selenium.version}    org.seleniumhq.selenium selenium-server ${selenium.version}    org.seleniumhq.selenium selenium-firefox-driver ${selenium.version}    org.seleniumhq.selenium selenium-api ${selenium.version}    org.seleniumhq.selenium selenium-remote-driver ${selenium.version}    org.seleniumhq.selenium selenium-support ${selenium.version}  

什么是NoClassDefFoundError

Java Virtual Machine无法在运行时找到可在编译时使用的特定类时,Java中会出现NoClassDefFoundError 。 例如,如果我们已经从类中解析了一个方法调用或者访问了类的任何静态成员,并且该类在运行时不可用,那么JVM将抛出NoClassDefFoundError

您看到的错误是:

 Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/WebDriver 

这清楚地表明Selenium试图在运行时从org/openqa/selenium/WebDriver中解析特定的类,而这种类不再可用。

正如您提到的查看~/.m2/repository文件夹, Selenium v3.7.1 (在Windows上)的maven文件夹结构如下:

 C:\Users\\.m2\repository\org\seleniumhq\selenium\selenium-java\3.7.1 

因此,当您看到seleniumhq文件夹时,非常期待它。

什么地方出了错 :

从上述所有要点可以清楚地看出,相关的ClassMethods是从一个源Compile Time解决的,该Compile TimeRun Time期间不可用。

如果存在多个源以通过JDK / Maven / Gradle解析类和方法,则会出现这种情况。

方案:

以下是解决NoClassDefFoundError的几个步骤:

  • 使用构建工具(例如MavenGradle ,从Java Build Path 删除所有External JARsMavenGradle将下载并解决所有必需的依赖项。
  • 如果在Java Project使用Selenium JARs ,则只在Java Build Path添加所需的External JARs ,并删除未使用的External JARs
  • 使用Maven ,使用selenium-javaselenium-server 。 避免同时使用两者。
  • pom.xml删除不需要的其他
  • 定期清理IDE中的Project Workspace ,仅用于构建具有所需依赖项的项目。
  • 使用CCleaner工具定期擦除OS杂务。
  • 当您执行Maven Project总是进行maven cleanmaven install ,然后进行maven test

Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/WebDriver错误中遇到过这个Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/WebDriver经验,想要分享自己的解决方案:

当我收到此错误时,我在编辑配置中使用Jar在IntelijIDEA中启动了我的应用程序(让我们检查): 在此处输入图像描述

在此处输入图像描述 错误是:

 Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/WebDriver at project.Main.main(Main.java:45) Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.WebDriver at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 1 more 

所以,我添加了Jar Application – > Application在此处输入图像描述 这里也改变了: 在此处输入图像描述

它帮助我解决错误。

注意 :我的依赖就像

   org.seleniumhq.selenium selenium-java 2.53.1