Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkState(ZLjava/lang/String;Ljava/lang/Object;)

Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkState(ZLjava/lang/String;Ljava/lang/Object;)

我开发的 selenium 代码是:

    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.edge.EdgeDriver;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.support.ui.Select;
    import java.util.List;

    public class TestDemoQA {
        public static void main(String[] args) throws InterruptedException{
            System.setProperty("webdriver.edge.driver", "C:\Users\Suganthan\Downloads\MicrosoftWebDriver.exe");
            WebDriver driver = new EdgeDriver();
            driver.get("http://demoqa.com/");
            driver.manage().window().maximize();`

我收到的错误是:

Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkState(ZLjava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)

我正在尝试根据 This Solution 通过升级 guava-21.0 来解决这个问题。但我仍然收到此错误。谁能给出解决方案?

这个错误信息...

Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkState(ZLjava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)

...意味着 JVM 无法 initiate/spawn 您的程序。

正如@GhostCat 指出的,您的主要问题是 guava 版本与您正在使用的其他二进制版本之间的 不兼容性

解决方案

  • JDK升级到最近的水平JDK 8u181
  • Selenium 升级到当前级别 Version 3.14.0
  • 当您删除以前版本的 Selenium Client 时,请确保正确删除所有关联的 jars
  • 清理您的项目工作区通过您的IDE重建你的项目只需要依赖。
  • 执行你的@Test.

请注意,您从 jar 列表中删除了旧的番石榴,然后才用新的番石榴替换

最后,我找到了解决办法。这很简单,伙计们。在您的项目中添加最新的 guava jar。注意:如果您已经有一个旧罐子(请删除它并添加一个新罐子)。按照 link : mvnrepository.com/artifact/com.google.guava/guava/29.0-jre

我有点明白这是什么了。所以我正在使用添加到我的项目类路径中的 TestNG。

当我传统上像下面给出的那样保存 Selenium Jars 时,它抛出了问题中所述的错误。

Selenium Jars

现在,如果您在将 selenium jar 更新到最新版本后仍收到错误,那么您的 TestNG jar 中存在问题。如果你仔细导航到 testng jars 文件夹,你会看到 guava 已经存在(在大多数情况下有一些过时的版本)。只需删除那个。

就我而言,我的 selenium jars 文件夹中有最新的 guava jar(版本 30 或其他版本),但在我的 TestNG 文件夹中,我有大约 19 版本的 guava jar - 从而给 jvm 造成了混乱。

简而言之,在下载了更新的 jar 但仍然出现此类错误的情况下,这主要是某种歧义的情况。

发生此问题是因为 Hive 库文件夹和 Hadoop 共享文件夹中的 guava 库版本不同。

要解决此问题,我们需要确保版本一致。 解决问题

按照以下步骤修复它:

--> 进入 $HIVE_HOME (%HIVE_HOME%)/lib 文件夹并找出 guava 的版本。对于 Hive 3.0.0,它是 guava-19.0.jar.

--> 转到 $HADOOP_HOME (%HADOOP_HOME%)/share/hadoop/common/lib 文件夹并找出 guava 的版本。对于 Hadoop 3.2.1,版本是 guava-27.0-jre.jar.

-->如果它们不相同(在这种情况下是正确的),删除旧版本并在两者中复制新版本。在这种情况下,删除 Hive lib 文件夹中的 guava-19.0.jar,然后将 Hadoop 文件夹中的 guava-27.0-jre.jar 复制到 Hive.

问题已解决!

如果你的Hive和Hadoop版本不一致,你可能会遇到其他类似的奇怪错误。修复它们的常用方法是确保 JAR 文件版本相同。通常,如果您对齐 Hadoop 和 Hive 版本,这些问题就不会发生。