use*_*382 5 java dependency-management maven
我正在尝试创建一个库,该库将由在 Web 服务器等效项上运行的应用程序重用。
该库将使用 Selenium (v3.9.1),它依赖于 Guava (v23.6-jre),但是,WebServer 的类路径上也有 Guava,因此我遇到了依赖冲突。当我将我的库包含在应用程序中并运行它时,出现以下错误:
com.google.common.base.Preconditions.checkState(ZLjava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V (java.lang.NoSuchMethodError). (org.mule.api.MessagingException)
org.openqa.selenium.remote.service.DriverService.findExecutable(DriverService.java:124)
org.openqa.selenium.chrome.ChromeDriverService.access$000(ChromeDriverService.java:32)
org.openqa.selenium.chrome.ChromeDriverService$Builder.findDefaultExecutable(ChromeDriverService.java:137)
org.openqa.selenium.remote.service.DriverService$Builder.build(DriverService.java:339)
org.openqa.selenium.chrome.ChromeDriverService.createDefaultService(ChromeDriverService.java:88)
org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:157)
Run Code Online (Sandbox Code Playgroud)
由于我无法更改服务器本身的依赖关系,我想到使用 Maven Shading Plugin 创建一个 uber jar 并重新定位 guava 类 - 插件配置如下:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<configuration>
<artifactSet>
<includes>
<include>com.google.guava</include>
<include>org.seleniumhq.selenium</include>
</includes>
</artifactSet>
<relocations>
<relocation>
<pattern>com.google.common</pattern>
<shadedPattern>shaded.com.google.common</shadedPattern>
</relocation>
</relocations>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud)
所以,我相信这句话是在说:
com.google.common到shaded.com.google.common。这会生成 JAR,如果我解压它,我可以看到 google 库是阴影的。但是,当我运行该应用程序时,出现以下错误:
org.openqa.selenium.remote.service.DriverService$Builder.createArgs()Lshaded/com/google/common/collect/ImmutableList; (java.lang.AbstractMethodError).
这表明 Selenium DriverService$Builder 类和/或其引用的抽象方法在迁移过程中没有更新。
如果我重新定位谷歌库和硒库,我就可以让它工作
<relocations>
<relocation>
<pattern>com.google.common</pattern>
<shadedPattern>shaded.com.google.common</shadedPattern>
</relocation>
<relocation>
<pattern>org.openqa.selenium</pattern>
<shadedPattern>shaded.org.openqa.selenium</shadedPattern>
</relocation>
</relocations>
Run Code Online (Sandbox Code Playgroud)
但是,这意味着在我的应用程序(使用该库)中,我需要引用“shaded”包下的 Selenium 类。IEimport shaded.org.openqa.selenium.WebDriver;
无论如何,我是否可以只遮蔽 Guava 依赖项,而保留 Selenium 库?
非常感谢任何帮助,伊恩
| 归档时间: |
|
| 查看次数: |
1755 次 |
| 最近记录: |