我在一个服务中有以下依赖关系层次结构:
Service A
-> Lib A
-> Lib B
-> Lib A
-> Lib C
-> Lib A
-> Lib D
-> Lib A
"->"表示依赖于。
由于上述结构,出现了很多问题。其中需要投入大量精力的问题是保持Lib A在所有模块中同步以避免类冲突和其他问题。
我使用maven进行依赖管理,但它并不能解决这个问题,因为我必须更新所有依赖项以避免冲突(语义和功能)。
有更好的方法来管理这些依赖关系吗?
编辑1:
场景1:向仅由Lib B使用的Lib A添加新代码。
在这种情况下,仅更改Lib B是不够的。我将不得不在service A中添加最新版本的Lib A,以便maven选择正确的版本。
场景2:A中不向后兼容的更改。
如果我只是在Service A中更新Lib A,那么其他库(B、C和D)可能就不知道这个新变化,这可能会导致问题(例如,在现有方法中添加一个新参数)。我将不得不更新所有这些库。
场景3:更改Lib A中的现有方法。
这将正常工作。如果我在service A中更新此Lib A,maven将挑选最新的Lib A,所有库(B、C和D)都将使用Lib A的最新版本。
Lib A
不仅是一个库,而是多个库。 您应该考虑将Lib A
划分为多个较小的库,其中Lib A
仅包含所有库共有的代码,然后将特定于Lib B
,Lib C
和Lib D
的部分直接移动到那些库或移动到Lib BA
,Lib CA
,Lib DA
等库中。 - manishnode
开发者经常这样做,而且效果非常好。这对于方案2尤其有利。我确实认为解决方案是在应用程序中有多个第三方库的版本,但我不认为这是糟糕的设计。我也没有主张以这种方式处理每个第三方库(例如 servlet API)。 - Pace