繁体   English   中英

java.lang.NoClassDefFoundError: org/apache/commons/exec/Executor

[英]java.lang.NoClassDefFoundError: org/apache/commons/exec/Executor

我正在尝试执行以下代码,但在运行时出现错误“java.lang.NoClassDefFoundError: org/apache/commons/exec/Executor”。 我也添加了“Common-Exec jar”文件,但它不起作用。 我需要添加任何其他 jar 文件吗??

package cross_browser;
import org.testng.annotations.Test;
import org.testng.annotations.Parameters;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;

public class NewTest {
    WebDriver driver;
    String url;

  @BeforeClass
  @Parameters({"browser"})
  public void beforeTest(String browser) {
      url = "https://www.facebook.com";
      if (browser.equalsIgnoreCase("chrome"))
      {
          System.setProperty("webdriver.gecko.driver", "C:\\Users\\Prateek\\Desktop\\Drivers\\geckodriver.exe");
          driver = new FirefoxDriver();
      }
      if (browser.equalsIgnoreCase("firefox"))
      {
          System.setProperty("webdriver.chrome.driver", "C:\\Users\\Prateek\\Desktop\\Drivers\\chromedriver.exe");
          driver = new ChromeDriver();
      }
      driver.manage().window().maximize();    
  }

  @Test
  public void Test() {
      driver.get(url);
      driver.findElement(By.id("email")).sendKeys("Prateek");
      driver.findElement(By.id("password")).sendKeys("Prateek");
      driver.findElement(By.id("login")).click();
  }

  @AfterClass
  public void afterTest() {
      driver.quit();
  }

}

XML文件:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name = "CrossBrowser Testing" parallel = "tests" thread-count ="2">
<test name = "Chrome Testing">
    <parameter name ="browser" value = "chrome"></parameter>
        <classes>
            <class name = "cross_browser.NewTest"></class>
        </classes>
</test>
<test name = "firefox Testing">
    <parameter name ="browser" value = "firefox"></parameter>
        <classes>
            <class name = "cross_browser.NewTest"></class>
        </classes>
</test>
</suite>

NoClassDefFoundError

Java 虚拟机无法在运行时找到在编译时可用的特定类,就会发生Java 中的NoClassDefFoundError 例如,如果我们已经解决了从一个方法调用或访问任何的静态成员,并且该类运行时不可用,JVM将抛出NoClassDefFoundError错误

您看到的错误是:

Exception in thread "main" java.lang.NoClassDefFoundError: 
org/apache/commons/exec/Executor

这清楚地表明Selenium试图在运行时从org/apache/commons/exec/Executor解析一个无法访问/可用的特定类。

出了什么问题:

您已经提到添加Common-Exec jar,但似乎相关的方法是在Compile Time期间从一个来源解析的,而在Run Time期间不可用。

如果存在通过JDK / Maven / Gradle解析方法的多个源,并且在使用新 JAR文件升级时会发生这种情况,则会发生此错误。

解决方案:

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

  • 如果在Java 项目中使用Selenium JAR ,则仅在Java 构建路径中添加所需的外部 JAR ,并删除未使用/不需要的JAR
  • 如果使用构建工具(例如MavenGradle) ,请从Java 构建路径中删除所有外部 JAR MavenGradle将下载并解决所有必需的依赖项。
  • 如果使用Selenium JARs ,要么使用而不是使用selenium-java-xyz Java 客户端使用selenium-server-standalone-xyzjar而不是将所有必需的依赖项捆绑在一起。
  • 如果使用Maven ,请使用<artifactId>selenium-java</artifactId><artifactId>selenium-server</artifactId> 避免同时使用两者。
  • pom.xml 中删除不需要的其他<dependency>
  • 定期清理 IDE 中的项目工作区,仅用于构建具有所需依赖项的项目。
  • 使用CCleaner工具定期清除操作系统杂务。
  • 进行系统重启
  • 如果您正在执行Maven 项目,请始终执行maven cleanmaven installmaven test

尝试添加此依赖项,它对我有用

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-exec</artifactId>
    <version>1.3</version>
</dependency>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM