Maven 依赖冲突

Maven dependency conflicts

我在使用以下依赖项时尝试解决依赖项版本冲突。

我遇到的最糟糕的是 zucchini 项目支持从 1.4 到最新版本的 apache commons-io 版本。它不支持版本 低于 1.4 同时pagerduty-client支持commons-io个1.4以下的版本。 所以不可能指定这个依赖的通用版本(依赖管理) 它支持 zucchini 和 pager-duty 客户端(都是第三方库)。

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

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

由于您的 commons-io 是问题所在,您必须进一步查看。这意味着要么将 pagerduty-client 升级到使用 Cucumber 喜欢的较新版本的 commons-io 的版本,要么将 zucchini 降级为需要与 pagerduty-client 一起工作的 Cucumber 版本。

这是一些 jakarta commons 包的常见问题,他们在某个时候决定在不更改包名称的情况下大量更改 public 接口,从而给用户造成这样的冲突。

你可能很幸运,我曾经在一个项目中工作,我们不得不重写数千行代码,这样我们就可以 link 到一个我们迫切需要的库,它依赖于更新版本的 commons -io 比我们一直使用的那个。

可能性 1

如果旧的和新的 commons-io package/class 名称足够匹配,从 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-clientzucchini 部分可能不需要 'bundled' 在一起,所以将它们分开。

如果他们 需要一起工作,那么您仍然可以有两个 apps/processes 并在他们之间发送消息。

备注

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