我正在制作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作为构建工具。 有人可以提出更好的解决方案吗?
答案 0 :(得分:2)
如@Andreas所述,管理corejar1.0
和corejar1.1
之间的向后兼容性是您的责任。
要管理依赖图,您需要依赖构建工具。在此示例中,Gradle将意识到corejar
1.0
和1.1
之间存在版本冲突,并且Gradle的默认冲突解决机制是选择最高版本。
虽然这对您来说是一个很好的解决方案,但在其他情况下,它并不是那么简单。为此,您可以调整the way Gradle will resolve transitive dependencies及其版本。
答案 1 :(得分:0)
如果您确定对corejar1.1
所做的更改与corejar1.0
向后兼容,那么clientjar1
使用corejar1.1
并不一个问题。
要防止依赖冲突,您要确保共享库与该库的旧“用户”保持兼容。
如果无法使corejar1.1
与corejar1.0
向后兼容,则必须部署所有客户端jar的更新版本。