Maven的the脚的依赖冲突解决规则是“越近越好”:如果一个库有2个版本,则仅保留最接近传递依赖树主干的一个版本,其余版本从类路径中删除。 。这已导致maven构建的所有项目中普遍存在不稳定。
我想从两个方面解决这个问题:
使用像JHades这样的冲突检测分析器来扫描类路径中的所有内容,并从类加载器中报告版本冲突
使用精美的类加载器根据情况自定义类路径,以便在正确的时间使用正确的版本。这也是OSGi所采用的方法
要实现它们中的任何一个,我都需要重写maven,以使其在各种生命周期(尤其是“测试”)中将进一步版本的jar添加到类路径中。我该如何实现?
更新:我知道maven是一个旧产品,并且不是在设计时考虑到具有成千上万个依赖性的大型项目。因此,如果您在Gradle,Pants,Buck,sbt或任何深奥的构建工具中都有解决方案,我仍然会接受它作为有效答案。