两个不同的jar x,y依赖于z的不同版本。用户如何在应用程序中同时拥有x,y?

时间:2018-12-19 05:16:18

标签: java maven gradle dependencies dependency-management

我正在制作rest客户jar来调用每组服务。对于服务-1,服务-2,服务-3;我们分别有clientjar1,clientjar2,clientjar3。在所有其他客户端jar中,有一些通用功能,我将它们保留在单独的jar中,即“ corejar1.0”。所有客户端jar都依赖于“ corejar1.0”。

现在,我必须为一组新的服务4创建一个新的客户端jar“ clientjar4”。但这不适用于旧的“ corejar1.0”。因此,我修改了corejar的内容并发布了新版本“ corejar1.1”。因此,“ clientjar4”指的是“ corejar1.1”,而所有其他客户端指的是“ corejar1.0”。现在,如果用户想同时使用cientjar1和clientjar4,则会出现版本冲突,因为它们都引用了不同的核心jar版本。因此,其中一个客户端jar可能无法按预期工作。

因此,一种解决方案是通过更新所有客户端jar使其指向新的“ corejar1.1”来重新释放它们。我觉得这不是一个好方法,因为尽管它们各自的服务没有变化,但我们正在发布新版本的客户端jar。

我的项目是一个Java项目,我正在使用Gradle作为构建工具。 有人可以提出更好的解决方案吗?

2 个答案:

答案 0 :(得分:2)

如@Andreas所述,管理corejar1.0corejar1.1之间的向后兼容性是您的责任。

要管理依赖图,您需要依赖构建工具。在此示例中,Gradle将意识到corejar 1.01.1之间存在版本冲突,并且Gradle的默认冲突解决机制是选择最高版本。

虽然这对您来说是一个很好的解决方案,但在其他情况下,它并不是那么简单。为此,您可以调整the way Gradle will resolve transitive dependencies及其版本。

答案 1 :(得分:0)

如果您确定对corejar1.1所做的更改与corejar1.0 向后兼容,那么clientjar1使用corejar1.1并不一个问题。

要防止依赖冲突,要确保共享库与该库的旧“用户”保持兼容。

如果无法使corejar1.1corejar1.0向后兼容,则必须部署所有客户端jar的更新版本。