有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

番石榴需要两次,通过operadriverselenium-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(通过^{)。然而,Guava 19.0中引入了所需的Stopwatch::createStarted()方法。手动将Guava 19.0依赖项添加到项目的POM中修复了这个问题

但这不是硒和/或Opera驱动程序包装的问题吗?你认为应该向上游报告,还是我的变通方法是在Maven中这样做的正确方法


共 (1) 个答案

  1. # 1 楼答案

    这是Java和Maven中非常常见的情况,而不是缺陷

    正确的解决方案是在pom中添加exclusion。比如:

    <dependency>
        <groupId>com.opera</groupId>
        <artifactId>operadriver</artifactId>
        <version>1.5</version>
        <exclusions>
            <!  outdated library conflicts with selenium-java  >
            <exclusion>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>[2.33.0,)</version>
        <scope>test</scope>
    </dependency>
    

    请注意,在极少数情况下——例如,如果guava版本19不推荐operadriver 1.5所依赖的版本14中的内容——这样做可能会破坏operadriver