由于maven子依赖关系问题,在运行时获取“找不到类”错误:
我正在集成TwilioSDK(com.twilio.com)。sdk:twilio:7.35.0)转换为多模块maven(3.x)/java(java8)项目。我首先将TwilioMaven依赖项添加到相应的模块中,在org.apache.http.conn.httpclientconnectionmanager的运行时得到一个类NotFoundException。我研究了一下,发现这个类是org.apache.httpc的一部分omponents:httpclient (这是TwilioSDK中的一个子依赖项)并且这个依赖项的早期版本在我的项目中。而且这个早期版本没有httpclientconnectionmanager类。
所以从这一点上说,我尝试先用exclude标记排除旧版本的依赖项,然后用maven enforcer插件,同时直接导入依赖项,但没有任何效果。我尝试在父pom和其他使用我的twilio模块的模块中导入依赖关系。
我使用的是Twilio7.35,它使用org.apache.httpcomponents:4.5.6 but 在我的多模块项目中,我使用org.apache。cassandra:cassandra-thrift:3.0.0正在使用thrift:0.9.2 which 包含httpclient的旧版本(4.2.5)。这个cassandra模块的最新版本不支持最新版本的httpclient,所以我需要确保这个httpclient旧版本的依赖不会弄乱twilio。
我还分析了mvnd的输出ependency:tree -dverbose 看来4.5.6已经被正确的接受了。当我尝试将它添加到父模块或调用模块时,我可以看到旧版本正在被twilio模块覆盖,但它不能解决我的问题。
我开始怀疑是否有可能在同一个maven项目中有两个版本的依赖关系。
1条答案
按热度按时间utugiqy61#
听起来您遇到了类似于处理jar-hell的相关问题:jar-hell:如何在运行时使用类加载器将一个jar库版本替换为另一个jar库版本
在这种情况下,您需要在项目中使用一个独立于默认类加载器的类加载器。也许您可以使用url类加载器,从文件系统中加载一些或所有较新的依赖项。