使用Twilio在运行时发生Maven子依赖性冲突

问题描述 投票:0回答:1

由于maven子依赖问题,在运行时获取类未找到错误:

我正在努力将twilio sdk(com.twilio.sdk:twilio:7.35.0)集成到多模块maven(3.x)/ java(java8)项目中。我首先将twilio maven依赖项添加到相应的模块中我在运行时在org.apache.http.conn.HttpClientConnectionManager上获得了一个未找到类的类。我查看了它,发现这个类是org.apache.httpcomponents的一部分:httpclient(这是twilio sdk中的一个子顺序),并且这个依赖项的早期版本在我的项目中。而这个早期版本没有HttpClientConnectionManager类。

所以从这一点开始,我尝试先使用exclude标签排除旧版本的依赖项,然后使用maven enforcer插件,同时直接导入依赖项,但没有任何效果。我尝试在父pom和使用我的twilio模块的其他模块中导入依赖项。

我正在使用twilio 7.35,它使用的是org.apache.httpcomponents:4.5.6但在我的多模块项目中我正在使用org.apache.cassandra:cassandra-thrift:3.0.0正在使用thrift:0.9.2包含旧版本的httpclient(4.2.5)。这个cassandra模块的最新版本不支持最新版本的httpClient,所以我需要确保这个httpclient旧版依赖项不会弄乱twilio版本。

我还分析了mvn依赖的输出:tree -Dverbose,似乎4.5.6正在被提升为correclty。当我尝试将它添加到父模块或调用模块时,我可以看到旧版本被twilio覆盖了,但它并没有解决我的问题。

我开始怀疑在同一个maven项目中是否有可能有两个版本的依赖项。

java maven cassandra twilio thrift
1个回答
0
投票

听起来你正在经历类似于与Jar Hell相关的问题:Jar hell: how to use a classloader to replace one jar library version with another at runtime

在这种情况下,您需要使用项目中默认的类加载器。也许你可以使用URL Classloader并从文件系统加载一些或所有新的依赖项。

© www.soinside.com 2019 - 2024. All rights reserved.