在单独的 Java 平台模块中使用不同版本的依赖项版本冲突
我期望可以在myModuleA中使用番石榴-19,在myModuleB中使用番石榴-20,因为拼图模块有自己的类路径。
假设 myModuleA 使用 Iterators.emptyIterator();- 在番石榴-20中被删除,myModuleB使用新的静态方法FluentIterable.of();- 在番石榴-19中没有。不幸的是,我的测试是阴性的。在编译时,它看起来很好。与运行时相反,结果是NoSuchMethodError。这意味着,类装入器上第一个类决定哪一个失败。
与底层耦合的封装?我为自己找到了一个理由。它无法得到支持,因为传递依赖关系将具有与以前相同的问题。如果一个番石榴类在模块A和模块B的签名中发生了版本冲突,则依赖于它。应该使用哪个类?
但是为什么在整个互联网上我们都可以读到“拼图 - 模块系统停止了类路径地狱”?我们现在有多个较小的“类似于类的路径”,它们具有相同的问题。这与其说是一个问题,不如说是一个不确定性。