ApacheHttpClient$Factory 抛出 java.lang.NoClassDefFoundError 异常
ApacheHttpClient$Factory throwing java.lang.NoClassDefFoundError Exception
我正在尝试 运行 通过 BrowserStack 上的 Appium 进行示例测试。所有代码均来自 BrowserStack 并使用其示例 .ipa 文件。以下是我收到的错误日志。
Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/remote/internal/ApacheHttpClient$Factory
at io.appium.java_client.remote.AppiumCommandExecutor.<init>(AppiumCommandExecutor.java:55)
at io.appium.java_client.AppiumDriver.<init>(AppiumDriver.java:131)
at io.appium.java_client.ios.IOSDriver.<init>(IOSDriver.java:82)
at BrowserStackIOS.main(BrowserStackIOS.java:28)
Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.remote.internal.ApacheHttpClient$Factory
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 4 more
这是第 28 行引用的代码行
IOSDriver<IOSElement> driver = new IOSDriver<IOSElement>(new URL("http://"+userName+":"+accessKey+"@hub-cloud.browserstack.com/wd/hub"), caps);
除此之外,我还在使用 maven。
我从 https://search.maven.org/search?q=g:io.appium%20AND%20a:java-client
得到了我的依赖
来自 https://selenium.dev/downloads/
的绑定(针对 java)
关于 Bindngs,我不确定我是否安装了它们 correctly.I 提取了 zip 文件并将位于 libs 文件夹中的 .jar 文件添加到我的依赖项中。
这是截图https://prnt.sc/qoqwzf
这是 selenium/remote/internal 文件夹 https://prnt.sc/qoqxh8
的屏幕截图
备注:
以前从未使用过 Maven,所以我只包含额外的注释:
当我 运行 mvn install -U 时,我收到构建成功
我只在尝试构建项目时收到该错误。
我为尝试解决错误所做的工作:
我已经使用 https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java/4.0.0-alpha-4
将所有 selenium 依赖项更新为 4.0.0-alpha-4
我尝试通过以下方式编辑我的 pom.xml:
添加网络驱动程序依赖项
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-remote-driver</artifactId>
<version>4.0.0-alpha-4</version>
</dependency>
添加 Safari 网络驱动程序依赖项
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-safari-driver</artifactId>
<version>4.0.0-alpha-4</version>
</dependency>
补充说明:
我的 POM.xml 看起来与 https://search.maven.org/remotecontent?filepath=io/appium/java-client/7.3.0/java-client-7.3.0.pom 中给出的完全一样,但有一些额外的依赖项,我在上面已经注意到了。
以下是我在主 class
中请求的导入
import java.net.URL;
import java.util.List;
import java.net.MalformedURLException;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.ExpectedConditions;
import io.appium.java_client.MobileBy;
import io.appium.java_client.ios.IOSDriver;
import io.appium.java_client.ios.IOSElement;
我还根据收到的错误将 maven 编译器源代码编辑为 7,因为编译器源代码 5 与我的 运行ning 不兼容。
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
以下是我编辑的 pom 的开头,不确定这是否是个问题,但我想其他人会知道。
<modelVersion>4.0.0</modelVersion>
<groupId>-</groupId>
<artifactId>First</artifactId>
<version>1.0-SNAPSHOT</version>
<name>java-client</name>
<description>Java client for Appium Mobile Webdriver</description>
<url>http://appium.io</url>
如果需要任何其他信息,请告诉我。我目前正在调整我的环境,所以出现了各种错误并得到了解决。
这是唯一一个我无法真正理解的问题。
编辑:
我的 Appium 依赖项是
<dependency>
<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>4.1.2</version>
</dependency>
我当前的所有依赖项
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.0.0-alpha-4</version>
<scope>compile</scope>
<exclusions>
<exclusion>
<artifactId>*</artifactId>
<groupId>com.google.code.gson</groupId>
</exclusion>
<exclusion>
<artifactId>htmlunit-driver</artifactId>
<groupId>*</groupId>
</exclusion>
<exclusion>
<artifactId>*</artifactId>
<groupId>net.sourceforge.htmlunit</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-support</artifactId>
<version>4.0.0-alpha-4</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-api</artifactId>
<version>4.0.0-alpha-4</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-safari-driver</artifactId>
<version>4.0.0-alpha-4</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-remote-driver</artifactId>
<version>4.0.0-alpha-4</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
<scope>compile</scope>
</dependency>
已删除
org.apache.httpcomponents
httpclient
4.5.9
compile
Deleted
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.2.12</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>commons-validator</groupId>
<artifactId>commons-validator</artifactId>
<version>1.6</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.9</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.8.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.26</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>4.1.2</version>
</dependency>
<!-- Thanks for using https://jar-download.com -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.10</version>
</dependency>
</dependencies>
这个问题的根本原因是Jar hell
Dependencies for selenium 4.0.0-alpha-4 depends on Appium Java Client
7.1.0.
由于您在 pom.xml 文件中声明的依赖项与 Appium Java 客户端的传递依赖项之间存在冲突,您会遇到错误。如果你将 Appium Java Client 4.1.2 更改为 Appium Java Client 7.1.0 将解决问题。
我正在尝试 运行 通过 BrowserStack 上的 Appium 进行示例测试。所有代码均来自 BrowserStack 并使用其示例 .ipa 文件。以下是我收到的错误日志。
Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/remote/internal/ApacheHttpClient$Factory
at io.appium.java_client.remote.AppiumCommandExecutor.<init>(AppiumCommandExecutor.java:55)
at io.appium.java_client.AppiumDriver.<init>(AppiumDriver.java:131)
at io.appium.java_client.ios.IOSDriver.<init>(IOSDriver.java:82)
at BrowserStackIOS.main(BrowserStackIOS.java:28)
Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.remote.internal.ApacheHttpClient$Factory
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 4 more
这是第 28 行引用的代码行
IOSDriver<IOSElement> driver = new IOSDriver<IOSElement>(new URL("http://"+userName+":"+accessKey+"@hub-cloud.browserstack.com/wd/hub"), caps);
除此之外,我还在使用 maven。 我从 https://search.maven.org/search?q=g:io.appium%20AND%20a:java-client
得到了我的依赖来自 https://selenium.dev/downloads/
的绑定(针对 java)关于 Bindngs,我不确定我是否安装了它们 correctly.I 提取了 zip 文件并将位于 libs 文件夹中的 .jar 文件添加到我的依赖项中。 这是截图https://prnt.sc/qoqwzf 这是 selenium/remote/internal 文件夹 https://prnt.sc/qoqxh8
的屏幕截图备注: 以前从未使用过 Maven,所以我只包含额外的注释: 当我 运行 mvn install -U 时,我收到构建成功 我只在尝试构建项目时收到该错误。
我为尝试解决错误所做的工作: 我已经使用 https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java/4.0.0-alpha-4
将所有 selenium 依赖项更新为 4.0.0-alpha-4我尝试通过以下方式编辑我的 pom.xml: 添加网络驱动程序依赖项
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-remote-driver</artifactId>
<version>4.0.0-alpha-4</version>
</dependency>
添加 Safari 网络驱动程序依赖项
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-safari-driver</artifactId>
<version>4.0.0-alpha-4</version>
</dependency>
补充说明: 我的 POM.xml 看起来与 https://search.maven.org/remotecontent?filepath=io/appium/java-client/7.3.0/java-client-7.3.0.pom 中给出的完全一样,但有一些额外的依赖项,我在上面已经注意到了。
以下是我在主 class
中请求的导入import java.net.URL;
import java.util.List;
import java.net.MalformedURLException;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.ExpectedConditions;
import io.appium.java_client.MobileBy;
import io.appium.java_client.ios.IOSDriver;
import io.appium.java_client.ios.IOSElement;
我还根据收到的错误将 maven 编译器源代码编辑为 7,因为编译器源代码 5 与我的 运行ning 不兼容。
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
以下是我编辑的 pom 的开头,不确定这是否是个问题,但我想其他人会知道。
<modelVersion>4.0.0</modelVersion>
<groupId>-</groupId>
<artifactId>First</artifactId>
<version>1.0-SNAPSHOT</version>
<name>java-client</name>
<description>Java client for Appium Mobile Webdriver</description>
<url>http://appium.io</url>
如果需要任何其他信息,请告诉我。我目前正在调整我的环境,所以出现了各种错误并得到了解决。 这是唯一一个我无法真正理解的问题。
编辑: 我的 Appium 依赖项是
<dependency>
<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>4.1.2</version>
</dependency>
我当前的所有依赖项
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.0.0-alpha-4</version>
<scope>compile</scope>
<exclusions>
<exclusion>
<artifactId>*</artifactId>
<groupId>com.google.code.gson</groupId>
</exclusion>
<exclusion>
<artifactId>htmlunit-driver</artifactId>
<groupId>*</groupId>
</exclusion>
<exclusion>
<artifactId>*</artifactId>
<groupId>net.sourceforge.htmlunit</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-support</artifactId>
<version>4.0.0-alpha-4</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-api</artifactId>
<version>4.0.0-alpha-4</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-safari-driver</artifactId>
<version>4.0.0-alpha-4</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-remote-driver</artifactId>
<version>4.0.0-alpha-4</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
<scope>compile</scope>
</dependency>
已删除
org.apache.httpcomponents httpclient 4.5.9 compile Deleted
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.2.12</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>commons-validator</groupId>
<artifactId>commons-validator</artifactId>
<version>1.6</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.9</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.8.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.26</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>4.1.2</version>
</dependency>
<!-- Thanks for using https://jar-download.com -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.10</version>
</dependency>
</dependencies>
这个问题的根本原因是Jar hell
Dependencies for selenium 4.0.0-alpha-4 depends on Appium Java Client 7.1.0.
由于您在 pom.xml 文件中声明的依赖项与 Appium Java 客户端的传递依赖项之间存在冲突,您会遇到错误。如果你将 Appium Java Client 4.1.2 更改为 Appium Java Client 7.1.0 将解决问题。