我正在制作其余的客户端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。我觉得这不是一个好方法,因为尽管它们各自的服务没有变化,但我们正在发布新版本的客户端jar。
我的项目是一个Java项目,我正在使用Gradle作为构建工具。
有人可以提出更好的解决方案吗?
最佳答案
如@Andreas所述,管理corejar1.0
和corejar1.1
之间的向后兼容性是您的责任。
为了管理依赖图,您依赖于构建工具。在此示例中,Gradle将意识到corejar
1.0
和1.1
之间存在版本冲突,并且Gradle的默认冲突解决机制是选择最高版本。
尽管在您的情况下,这看起来是不错的解决方案,但在其他情况下,情况并非如此简单。为此,您可以调整the way Gradle will resolve transitive dependencies及其版本。
关于java - 两个不同的jar x,y依赖于z的不同版本。用户如何在应用程序中同时拥有x,y?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53844977/