Maven,两个第三方使用不兼容的lib版本

时间:2016-10-20 00:24:23

标签: java maven maven-2 maven-3 pom.xml

我有一个使用两个第三方库的项目。这两个都使用org.eclipse.jetty,但完全不同的版本。树就像:

[INFO] +- com.some.package:my-core-lib:jar:1.0-SNAPSHOT:compile
[INFO] |  \- org.apache.samza:samza-core_2.10:jar:0.9.1:compile
[INFO] |     \- org.eclipse.jetty:jetty-webapp:jar:8.1.8.v20121106:compile
[INFO] |        +- org.eclipse.jetty:jetty-xml:jar:8.1.8.v20121106:compile
[INFO] |        |  \- org.eclipse.jetty:jetty-util:jar:8.1.8.v20121106:compile
[INFO] |        \- org.eclipse.jetty:jetty-servlet:jar:8.1.8.v20121106:compile
[INFO] |           \- org.eclipse.jetty:jetty-security:jar:8.1.8.v20121106:compile
[INFO] |              \- (org.eclipse.jetty:jetty-server:jar:8.1.8.v20121106:compile - omitted for conflict with 9.2.18.v20160721)
[INFO] \- come:third-party-two:jar:2.0.3:compile
[INFO]    +- org.eclipse.jetty.websocket:websocket-client:jar:9.2.18.v20160721:compile
[INFO]    |  +- org.eclipse.jetty:jetty-io:jar:9.2.18.v20160721:compile
[INFO]    |  \- org.eclipse.jetty.websocket:websocket-common:jar:9.2.18.v20160721:compile
[INFO]    |     \- (org.eclipse.jetty:jetty-io:jar:9.2.18.v20160721:compile - omitted for duplicate)
[INFO]    +- org.eclipse.jetty:jetty-server:jar:9.2.18.v20160721:compile
[INFO]    |  +- org.eclipse.jetty:jetty-http:jar:9.2.18.v20160721:compile
[INFO]    |  \- (org.eclipse.jetty:jetty-io:jar:9.2.18.v20160721:compile - omitted for duplicate)
[INFO]    \- org.eclipse.jetty.websocket:websocket-server:jar:9.2.18.v20160721:compile
[INFO]       \- (org.eclipse.jetty:jetty-http:jar:9.2.18.v20160721:compile - omitted for duplicate)

我不能要求这两方中的任何一方改变他们的依赖关系。有没有办法让他们使用正确的版本? 非常感谢!

1 个答案:

答案 0 :(得分:0)

通常,在Maven中,您可以只拥有一个给定依赖项的版本。首先,您应该尝试使用不同版本的jetty(从较新版本开始)编译和测试您的程序,以确定您是否找到适合所有版本的版本。您可以通过在dependencyManagement部分设置版本来完成此操作。

如果您找到兼容版本,则会遇到麻烦。您可以通过某种技巧尝试加载两个jar,但如果它们具有相同名称的类(很可能),则类加载器只能加载其中一个。可能还有一些用于重命名类的工具,但这可能会变得非常混乱。