首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Maven依赖冲突

Maven依赖冲突
EN

Stack Overflow用户
提问于 2018-07-24 07:57:58
回答 2查看 784关注 0票数 5

在使用下面的依赖项时,我试图解决依赖版本冲突。

我面临的最糟糕的问题是zucchini项目支持从1.4到最新的commons-io版本。它不支持低于1.4的版本,同时pagerduty-client支持低于1.4版本的commons-io版本。因此,不可能指定此依赖项的公共版本(依赖管理),它既支持南瓜,也支持寻呼功能客户端(都是第三方库)。

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

代码语言:javascript
运行
复制
        <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>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-24 09:54:50

可能性1

如果旧的和新的commons包/类名足够接近匹配,那么从pagerduty-client中排除旧的依赖项可能会起作用。

https://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html

代码语言:javascript
运行
复制
    <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-clientzucchini部分不需要“捆绑”在一起,所以将它们分开。

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

Note

我克隆了pagerduty-client 存储库,并将commons依赖关系从org.apache.commons:commons-io:1.3.2更改为commons-io:commons-io:2.5,并且测试工作正常,所以您也许可以向项目所有者建议他们升级commons。

看一看代码,似乎很少使用commons(一个地方,HttpApiServiceImpl.java):

代码语言:javascript
运行
复制
\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;
票数 1
EN

Stack Overflow用户

发布于 2018-07-24 09:46:00

由于您的公域-io是问题所在,您必须再往前看。这意味着要么将分页-客户端升级到使用Cucumber所喜欢的较新版本commons的版本,要么将南瓜降级为需要与分页客户端一起工作的Cucumber版本。

对于某些来说,这是一个常见的问题,它们决定在不更改包名的情况下大规模更改公共接口,从而给用户造成这样的冲突。

你可能很幸运,我曾经做过一个项目,我们不得不重写数千行代码,这样我们就可以链接到一个我们迫切需要的库,这个库依赖于新版本的commons,而不是我们一直使用的版本。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51493400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档