Maven依赖冲突

5

我正在尝试解决以下依赖项的版本冲突。

最困难的是zucchini项目支持apache commons-io 1.4到最新版本。它不支持1.4以下的版本,同时pagerduty-client支持低于1.4版本的commons-io。因此,无法指定一个支持zucchini和pager-duty client(两个都是第三方库)的此依赖项的通用版本(依赖关系管理)。

enter image description here

在这种特殊情况下,我找不到解决此问题的可能方法。将不胜感激地接受任何帮助。

        <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>

也许可以通过Maven shade插件来“解决”这个问题。 - J Fabian Meier
首先,我建议删除您正在使用的版本范围,然后建议从commons-io版本1.4开始添加一个明确的依赖关系。如果您的单元测试成功,您可以进行更改... - khmarbaise
不同版本之间是否存在实际问题?还是你只是不喜欢版本不一致的事实? - Paul Grime
问题在于不同版本。Zucchini和PagerDuty必须使用不同版本的commons-io。 - divz
我尝试选择一个通用版本 https://mvnrepository.com/artifact/commons-io/commons-io,它可以与zucchini和pagerduty兼容...但是我无法找到。 - divz
显示剩余3条评论
2个回答

1
作为您的commons-io存在问题,您需要进一步查看。这意味着要么将pagerduty-client升级到使用Cucumber喜欢的更新版本的commons-io,要么将zucchini降级以要求与pagerduty-client兼容的Cucumber版本。

这是某些jakarta commons包的常见问题,它们在某个时候决定大规模更改公共接口而不更改软件包名称,从而为用户造成此类冲突。

您可能很幸运,我曾经参与过一个项目,在那里我们不得不重写数千行代码,以便我们可以链接到一个我们急需的库,该库依赖于比我们使用的commons-io更新的版本。


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>

这取决于commons-io的二进制API在1.3.2版本和2.x版本之间足够相似。看起来有很多重叠,从每个版本的代码来看:

可能性2

将应用程序拆分,使commons-io依赖项不共享且不冲突。

您的应用程序中的pagerduty-clientzucchini部分可能不需要“捆绑”在一起,因此可以将它们拆分。

如果它们确实需要一起工作,则仍然可以有两个应用程序/进程并在它们之间发送消息。

注意

我克隆了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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接