Maven依赖冲突

时间:2018-07-24 07:57:59

标签: maven maven-3

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

我遇到的最糟糕的情况是zucchini项目支持的Apache commons-io版本从1.4到最新版本。它不支持版本 1.4以下 同时pagerduty-client支持{1.4版本以下的commons-io版本。 因此,不可能指定此依赖项的通用版本(依赖项管理) 在夏南瓜和寻呼机客户端(均为第三方库)中都支持。

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>

2 个答案:

答案 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-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;