我有一个Maven项目。它包括2个罐子A和B,每个罐子都需要com.zeroc.Ice jar。问题是,jar A需要Ice 3.4.2,而jar B需要Ice 3.3.1。
问题是,当使用Ice-3.4.2运行项目时,jar B的一些深层内部类抛出NoSuchMethodError(事实上,此版本中没有这样的方法),并且它与Ice 3.3的工作方式相同.1,但现在jar抛出NoClassDefFoundError(深入内部的某个地方)。看起来这些Ice版本之间存在重大变化,3.4.2不向后兼容。
我有什么方法可以同时包括两个罐子和#34;告诉"哪个Ice版本应该用于它们(A和B)?我正在寻找解决方案,无需使用罐子A或B的代码 - 是否可能?
更新
它出来了,jar B包含自己的ICE版本(具有不同的命名空间)。在我用新的ICE升级主项目之后它以某种方式发生了冲突,并引发了问题。我在pom.xml中更改了依赖项的顺序,它解决了我的问题。
但如果有人面临我首先描述的问题,我认为检查 maven shade plugin 是个好主意。我不太确定,但在寻找解决方案时,有人指出了我的方向。根据我的意见,它允许您使用相同jar的不同版本,并以您需要的方式绑定它(它使用命名空间)。