使用Selenium与Java时出现NoClassDefFoundError: okhttp3/ConnectionPool错误
解决Selenium运行时
okhttp3.ConnectionPool找不到的问题 这个问题我之前踩过坑!虽然你觉得依赖配置没问题,但NoClassDefFoundError: okhttp3/ConnectionPool本质还是类加载的问题,大概率是依赖缺失、版本不匹配或者构建缓存导致的,咱们一步步来排查解决:
1. 确认依赖是否完整且版本匹配
Selenium 4.x及以后的版本依赖okhttp3库处理网络请求,如果你用Maven或Gradle管理依赖,先检查配置里有没有正确引入okhttp,并且版本和Selenium兼容:
Maven示例(pom.xml)
<!-- 确保Selenium依赖正确 --> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.15.0</version> <!-- 替换成你实际使用的版本 --> </dependency> <!-- 若自动依赖未生效,可显式引入okhttp --> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.11.0</version> <!-- 对应Selenium 4.15.0的兼容版本,可按需调整 --> </dependency>
Gradle示例(build.gradle)
dependencies { implementation 'org.seleniumhq.selenium:selenium-java:4.15.0' implementation 'com.squareup.okhttp3:okhttp:4.11.0' }
注意:不同版本的Selenium对应不同的okhttp版本,版本不匹配会直接导致类找不到,建议优先让构建工具自动管理依赖(只引入selenium-java,让它自动拉取所需的okhttp版本)。
2. 清理构建缓存,重新构建项目
有时候IDE或构建工具的缓存会导致依赖没有正确加载,试试这些操作:
- 如果用Maven:执行命令
mvn clean install,清理旧构建文件并重新下载依赖 - 如果用Gradle:执行命令
gradle clean build - 在IDE中(比如IntelliJ/Eclipse):清理缓存并重启,比如IntelliJ可通过
File -> Invalidate Caches... -> Invalidate and Restart操作
3. 排查依赖冲突
可能你的项目里其他依赖引入了不兼容的okhttp版本,导致类加载冲突。可以用以下命令查看依赖树:
- Maven:
mvn dependency:tree - Gradle:
gradle dependencies
找到输出中所有okhttp相关条目,如果有多个版本,排除掉旧的或不兼容的那个。比如Maven里可以用<exclusions>标签排除冲突依赖:
<dependency> <groupId>冲突依赖的groupId</groupId> <artifactId>冲突依赖的artifactId</artifactId> <version>xxx</version> <exclusions> <exclusion> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> </exclusion> </exclusions> </dependency>
4. 手动导入Jar包的情况排查
如果你没有用构建工具,而是手动添加Jar包,要确保:
- 已经把okhttp的Jar包(包括
okhttp.jar和它的依赖okio.jar)添加到项目构建路径中 - Jar包没有损坏,版本和Selenium匹配
- IDE里没有把这些Jar包标记为“无效”或“未加载”
另外提个小建议:现在Selenium 4.x支持自动管理驱动,你可以用ChromeDriverManager替代手动设置系统属性,代码更简洁还能避免驱动路径问题:
import io.github.bonigarcia.wdm.WebDriverManager; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public static void main(String[] args) { WebDriverManager.chromedriver().setup(); WebDriver driver = new ChromeDriver(); driver.get("http://google.com"); }
内容的提问来源于stack exchange,提问作者Bota723
相关产品推荐
相关产品推荐

