【发布时间】:2019-08-11 16:13:25
【问题描述】:
由于 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 类。
因此,从这一点开始,我尝试先使用排除标记排除旧版本的依赖项,然后使用 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 dependency:tree -Dverbose 的输出,似乎 4.5.6 正在被正确接收。当我尝试将它添加到父模块或调用模块时,我可以看到旧版本被 twilio 覆盖,但这并没有解决我的问题。
我开始怀疑是否有可能在同一个 maven 项目中拥有两个版本的依赖项。
【问题讨论】:
-
请提供一个最小可行的例子。结帐stackoverflow.com/help/mcve了解更多详情!
-
在 Maven 中,你只能在依赖树中同时拥有一个依赖版本。不过,maven shade 插件有一些丑陋的变通方法。
标签: java maven cassandra twilio thrift