添加ZXing依赖后Java Selenium报IllegalAccessError问题求助
解决Selenium与ZXing的依赖冲突问题
我来帮你梳理这个问题的根源和可行解决方案:
问题回顾
你在基于Java的Selenium测试项目中引入ZXing二维码扫描库后,哪怕没有编写任何ZXing相关代码,启动ChromeDriver时也抛出了java.lang.IllegalAccessError,错误指向Selenium的UrlChecker类尝试访问Guava的SimpleTimeLimiter构造方法失败。这个问题的核心确实是依赖冲突。
原因分析
报错的本质是Guava(Google核心工具库)的版本不一致:
- Selenium(尤其是你之前使用的新版本)依赖特定版本的Guava,其中
SimpleTimeLimiter的构造方法签名或访问权限是固定的 - ZXing 3.3.1依赖的Guava版本与Selenium的依赖版本不兼容,Gradle自动解析依赖时会优先选择某一版本,导致Selenium需要的Guava方法无法正常访问
解决方案
方案1:降级依赖版本(你已验证有效)
通过使用兼容性经过验证的旧版本组合,可以直接绕过冲突:
在build.gradle中指定以下依赖:
// 降级Selenium到兼容版本 implementation 'org.seleniumhq.selenium:selenium-java:3.0.1' // 降级ZXing到对应兼容版本 implementation 'com.google.zxing:zxingorg:3.2.1'
方案2:排除冲突的Guava依赖(无需降级,推荐)
如果想保留较新的Selenium或ZXing版本,可以在引入ZXing时排除它自带的Guava依赖,强制使用Selenium依赖的Guava版本:
implementation('com.google.zxing:zxingorg:3.3.1') { // 排除ZXing依赖的Guava,避免与Selenium的版本冲突 exclude group: 'com.google.guava', module: 'guava' }
这样配置后,项目会复用Selenium依赖的Guava版本,既保留新版本功能,又解决了冲突问题。
方案3:强制统一Guava版本
如果排除依赖后仍有异常,可以强制指定项目中Guava的版本,确保所有依赖都使用同一个兼容版本:
configurations.all { resolutionStrategy.force 'com.google.guava:guava:23.0' // 选择与你的Selenium版本兼容的Guava版本 }
你可以根据自己使用的Selenium版本查找对应兼容的Guava版本(比如Selenium 3.x通常兼容Guava 23.x系列,Selenium 4.x则需要更高版本)。
内容的提问来源于stack exchange,提问作者fp25
相关产品推荐
相关产品推荐

