我有一个使用两个第三方库的项目。这两个都使用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)
我不能要求这两方中的任何一方改变他们的依赖关系。有没有办法让他们使用正确的版本? 非常感谢!
答案 0 :(得分:0)
通常,在Maven中,您可以只拥有一个给定依赖项的版本。首先,您应该尝试使用不同版本的jetty(从较新版本开始)编译和测试您的程序,以确定您是否找到适合所有版本的版本。您可以通过在dependencyManagement
部分设置版本来完成此操作。
如果您不找到兼容版本,则会遇到麻烦。您可以通过某种技巧尝试加载两个jar,但如果它们具有相同名称的类(很可能),则类加载器只能加载其中一个。可能还有一些用于重命名类的工具,但这可能会变得非常混乱。