我正在尝试使用以下依赖项来解决依赖项版本冲突。
我遇到的最糟糕的情况是zucchini
项目支持的Apache commons-io
版本从1.4到最新版本。它不支持版本
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>
答案 0 :(得分:1)
由于commons-io是问题,因此您必须进一步研究。这意味着要么将pagerduty-client升级到使用Cucumber喜欢的commons-io的较新版本的版本,要么降级西葫芦以要求也可以与pagerduty-client一起使用的Cucumber版本。
这是某些jakarta commons程序包的常见问题,他们决定在某个时候大规模更改公共接口而不更改程序包名称,从而给用户造成类似的冲突。
您可能很幸运,我曾经在一个项目中工作过,我们必须重写数千行代码,以便可以链接到我们迫切需要的库,该库依赖于commons-io而不是我们的较新版本。一直在使用。
答案 1 :(得分:1)
可能性1
如果旧的和新的commons-io程序包/类名称足够接近,则可以从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-io二进制API足够相似。
看每个版本的代码,似乎有很多重叠之处:
可能性2
拆分您的应用程序,以使commons-io依赖项不会共享并且不会发生冲突。
您的应用程序的pagerduty-client
和zucchini
部分可能不需要“捆绑”在一起,因此可以将它们分开。
如果他们需要一起工作,那么您仍然可以拥有两个应用/进程并在它们之间发送消息。
注意
我克隆了pagerduty-client
repo,并将commons-io的依赖性从org.apache.commons:commons-io:1.3.2
更改为commons-io:commons-io:2.5
,并且测试起作用了,所以也许您可以建议项目所有者:他们升级了commons-io。
再看一下代码,似乎几乎没有使用commons-io(一个地方,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;