我已经在我的pom.xml中添加了最新的硒依赖项
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.7.1</version>
</dependency>
我用pom在目录中运行了mvn clean install。xml和我还根据Selenium文档在我的应用程序类中导入了正确的类
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
然而,当我尝试运行我的主方法时,我得到以下错误
Exception in thread "main" java.lang.NoClassDefFoundError:
org/openqa/selenium/WebDriver
我在我的~/. m2/repository文件夹中查看,我没有看到openqa文件夹,而是看到了seleniumhq文件夹。
为什么maven没有安装openqa文件夹,为什么留档说要从org.openqa.导入...当它从来没有存在于我的jar存储库中时。我很困惑,我只想能够在本地存储库中成功导入硒网络驱动程序。
当Java虚拟机无法在运行时找到编译时可用的特定类时,Java中会发生NoClassDefFoundError
。例如,如果我们解析了一个类的方法调用或访问了一个类的任何静态成员,而该类在运行时不可用,那么JVM将抛出NoClassDefFoundError
。
您看到的错误是:
Exception in thread "main" java.lang.NoClassDefFoundError:
org/openqa/selenium/WebDriver
这清楚地表明,Selenium正试图在运行时从org/openqa/selenium/WebDriver
解析特定的类,该类不再可用。
正如你提到的查看~/。m2/repository
文件夹,Selenium v3的maven文件夹结构。7.1(在Windows上)如下所示:
C:\Users\<user_name>\.m2\repository\org\seleniumhq\selenium\selenium-java\3.7.1
因此,当您看到一个seleniumhq
文件夹时,它几乎是意料之中的。
从上面提到的所有点可以清楚地看出,相关的类或方法是从一个源编译时解决的,而编译时在运行时是不可用的。
如果存在多个源来通过JDK/Maven/Gradle解析类和方法,则会发生这种情况。
以下是解决NoClassDefFoundError的几个步骤:
在Eclipse IDE中遇到此错误。在Eclipse中转到项目属性,在Java构建路径中只需在类路径中添加硒罐而不是模块路径。然后在顶部的项目选项卡下执行清洁以删除早期的buiid,然后执行运行。
首先,正确地检查你的程序是否有所有重要的依赖项
其次,我在运行maven project时也遇到了类似的错误:
Caused by: java.lang.NoClassDefFoundError: org/openqa/selenium/JavascriptExecutor
这个问题是因为不合适的插件,因为我测试了不同版本的硒,它没有帮助我。
所以当我改变maven jar插件时:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>your_main_class</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
要maven shade插件
plugin:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>your_main_class</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
问题已经解决了。你可以在这里找到插件之间的区别。
此外,有时我们甚至用相同的方法名升级我们的库。由于版本不同,当一个库与此类升级不兼容时,我们会在运行时得到NoClassDefFoundError或NoSuchMethodError。
Java构建工具和IDE还可以生成依赖性报告,告诉您哪些库依赖于该JAR。通常,识别和升级依赖于旧JAR的库可以解决这个问题。
总结:
在创建hello world程序时,我遇到了这个异常。代码如下: 建造。渐变依赖项如下所示: 完整的stacktrace是这样的(我认为第一行是完全不相关的,但要确保):
我正在尝试编译并运行以下类: 我使用以下方法编译它: 但当我试图运行它时,我会遇到一个异常: java主 线程“main”java中出现异常。lang.NoClassDefFoundError:org/dom4j/io/SAXReader位于Main。main(main.java:31)由:java引起。lang.ClassNotFoundException:org。dom4j。木卫一。java的
我知道有很多关于这个例外的帖子,但是我不能解决这个问题。我认为必须编辑类路径来解决它。我试图在hadoop架构体系中运行一个名为远程地图的程序。这是我得到的错误。 Echo$CLASSPATH给出了一个空行 cat~/。bash_简介说 更新: $HADOOP_HOME $HADOOP_CLASSPATH 有人能帮我解决这个问题吗? 谢谢
jar-cvfe-dhj。jar DefaultHadoopJobDriver 我的Hadoop作业只有一个类“DefaultHoopJobDrive”,它扩展了配置和实现工具,并将方法作为作业创建和inputpath、outpurpath集的唯一代码运行。我也在使用新的API。
我有以下连接到neo4j db的应用程序: 当我尝试编译时,我得到了以下错误msg: 我做错了什么?如图所示,添加了neo4j库。
我正在使用Selenium来填写web表单。我在文档中添加了库。我的firefox版本应该是最新的。然而,结果却是错误的。如何修复?还是将webdriver用作Chrome更好? 线程“main”java中出现异常。lang.IllegalStateException:驱动程序可执行文件的路径必须由webdriver设置。壁虎。驱动系统属性;有关更多信息,请参阅https://github.com