java模棱两可的Maven依赖关系破坏了Selenium
我的项目依赖关系树摘录:
myproject
+- qxwebdriver-java 0.0.3
+- operadriver 1.5
| +- guava 14.0
+- selenium-java 2.52.0
+- selenium-remote-driver 2.52.0
| +- guava
+- selenium-safari-driver 2.52.0
番石榴需要两次,通过operadriver
和selenium-remote-driver
。在后一种情况下,声明依赖项时不使用版本。这个项目本身只需要qxwebdriver-java
什么都不需要
在此配置中,Safari驱动程序不工作:
java.lang.NoSuchMethodError: com.google.common.base.Stopwatch.createStarted()Lcom/google/common/base/Stopwatch;
at org.openqa.selenium.safari.SafariDriverCommandExecutor.start(SafariDriverCommandExecutor.java:111)
这是因为该项目对番石榴的总体依赖性分解为14.0(通过^{Stopwatch::createStarted()
方法。手动将Guava 19.0依赖项添加到项目的POM中修复了这个问题
但这不是硒和/或Opera驱动程序包装的问题吗?你认为应该向上游报告,还是我的变通方法是在Maven中这样做的正确方法
# 1 楼答案
这是Java和Maven中非常常见的情况,而不是缺陷
正确的解决方案是在pom中添加
exclusion
。比如:请注意,在极少数情况下——例如,如果guava版本19不推荐operadriver 1.5所依赖的版本14中的内容——这样做可能会破坏operadriver