在使用下面的依赖项时,我试图解决依赖版本冲突。
我面临的最糟糕的问题是zucchini
项目支持从1.4到最新的commons-io
版本。它不支持低于1.4的版本,同时pagerduty-client
支持低于1.4版本的commons-io
版本。因此,不可能指定此依赖项的公共版本(依赖管理),它既支持南瓜,也支持寻呼功能客户端(都是第三方库)。
在这种特殊情况下,我找不到解决这个问题的可能方法。任何帮助都将不胜感激。
<dependency>
<groupId>com.comcast.zucchini</groupId>
<artifactId>zucchini</artifactId>
<version>[2.2.5,)</version>
</dependency>
<dependency>
<groupId>com.github.dikhan</groupId>
<artifactId>pagerduty-client</artifactId>
<version>3.0.2</version>
</dependency>
发布于 2018-07-24 09:54:50
可能性1
如果旧的和新的commons包/类名足够接近匹配,那么从pagerduty-client
中排除旧的依赖项可能会起作用。
https://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html
<dependency>
<groupId>com.github.dikhan</groupId>
<artifactId>pagerduty-client</artifactId>
<version>3.0.2</version>
<exclusions>
<exclusion>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
</exclusion>
</exclusions>
</dependency>
这依赖于版本1.3.2和2.x之间的commons二进制API足够相似。
看一下每个版本的代码,似乎确实有很多重叠:
可能性2
拆分您的应用程序,以使commons依赖关系不被共享,也不会冲突。
可能您的应用程序的pagerduty-client
和zucchini
部分不需要“捆绑”在一起,所以将它们分开。
如果它们确实需要一起工作,那么您仍然可以有两个应用程序/进程,并在它们之间发送消息。
Note
我克隆了pagerduty-client
存储库,并将commons依赖关系从org.apache.commons:commons-io:1.3.2
更改为commons-io:commons-io:2.5
,并且测试工作正常,所以您也许可以向项目所有者建议他们升级commons。
看一看代码,似乎很少使用commons(一个地方,HttpApiServiceImpl.java
):
\pagerduty-client>findstr /s /c:"commons" *.java
src\main\java\com\github\dikhan\pagerduty\client\events\domain\AcknowledgeIncident.java:import org.apache.commons.lang3.StringUtils;
src\main\java\com\github\dikhan\pagerduty\client\events\domain\Incident.java:import org.apache.commons.lang3.StringUtils;
src\main\java\com\github\dikhan\pagerduty\client\events\domain\Incident.java:import org.apache.commons.lang3.builder.Builder;
src\main\java\com\github\dikhan\pagerduty\client\events\domain\Payload.java:import org.apache.commons.lang3.StringUtils;
src\main\java\com\github\dikhan\pagerduty\client\events\domain\ResolveIncident.java:import org.apache.commons.lang3.StringUtils;
src\main\java\com\github\dikhan\pagerduty\client\events\HttpApiServiceImpl.java:import org.apache.commons.io.IOUtils;
src\main\java\com\github\dikhan\pagerduty\client\events\PagerDutyEventsClient.java:import org.apache.commons.lang3.StringUtils;
src\main\java\com\github\dikhan\pagerduty\client\events\utils\FakePagerDutyEventsClient.java:import org.apache.commons.lang3.StringUtils;
发布于 2018-07-24 09:46:00
由于您的公域-io是问题所在,您必须再往前看。这意味着要么将分页-客户端升级到使用Cucumber所喜欢的较新版本commons的版本,要么将南瓜降级为需要与分页客户端一起工作的Cucumber版本。
对于某些来说,这是一个常见的问题,它们决定在不更改包名的情况下大规模更改公共接口,从而给用户造成这样的冲突。
你可能很幸运,我曾经做过一个项目,我们不得不重写数千行代码,这样我们就可以链接到一个我们迫切需要的库,这个库依赖于新版本的commons,而不是我们一直使用的版本。
https://stackoverflow.com/questions/51493400
复制相似问题