一、报错信息
在使用Java selenium的时候,遇到报错,无法成功创建driver.
报错如下:
java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkState(ZLjava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
二、问题排查
在网上查询之后,发现问题可能有两种:
1. 没有设置chrome driver的位置
//设置drver位置的方法。
System.setProperty(“webdriver.chrome.driver”, “/Users/supinrong/code/driver/chromedriver”);
2. guava包依赖冲突
排除掉第一种可能后,只能再查看第二种了。
三、guava包版本依赖冲突排查
1. gradle打印依赖包
打印项目依束包的指令
./gradlew app:dependencies
./gradlew dependencies -q --configuration compile
2. 检查依赖包中所有的guava包版本
可以在依赖树中看到,有很多使用guava包的地方,但是只有一个地方使用的是guava-jdk. 因此猜测是需要排除掉这个jdk包
| | \--- com.google.guava:guava-jdk5:17.0 | +--- org.springframework:spring-core:3.1.2.RELEASE | | +--- org.springframework:spring-asm:3.1.2.RELEASE | | \--- commons-logging:commons-logging:1.1.1 -> 1.2 | +--- com.logicmonitor:propertybase:115.1.0 | | +--- com.santaba:logicmonitor-util:1.106.2 -> 1.115.3 (*) | | +--- org.apache.commons:commons-lang3:3.4 -> 3.6 | | +--- com.google.guava:guava:20.0 -> 25.0-jre (*)
3. 修改项目的build.gradle文件
修改引入guava-jdk包的依赖包的依赖方式,把gauva-jdk排除在导入范围之外。
compile (“xxx:xxx:xxx”){ exclude group: ‘com.google.guava’, module:‘guava-jdk5’ }