依赖排除

maven实现依赖的“全局排除”

自闭症网瘾萝莉.ら 提交于 2019-12-09 19:16:23
大多数java应用源码构建和依赖管理是使用maven来实现的,maven也是java构建和依赖管理的事实上的标准。我们的应用系统也都是基于maven构建的,maven虽然在依赖管理方面确实很牛叉,但是并不能很优雅地解决所有依赖的问题,比如此次谈及的“全局排除”功能。 之前包括现在都在经历这样的事情,想禁止一个依赖被依赖进来,如果这个依赖属于冷门的依赖,很少类库会间接依赖它,那么进行一次排除完全OK,但是如果一个依赖是热门依赖,比如常用的apache的commons系列工具库,单独排除也可以实现,只是比较啰嗦,而且以后引入新的依赖就要时刻关心是否会带来不被允许的依赖,对维护人员来说简直是灾难。 首先谈下为什么有些依赖是一定不能允许的。在 日志详解 的博文中已经提到了依赖的一个典型特性—— 互斥,就是说有的依赖之间是不能共存的 ,比如提到过的slf4j-log4j和logback,guava和google-collection等等,一旦应用选择了使用logback就不能再引入slf4j-log4j依赖,原因可以看日志详解,而guava和google-collection会存在jar冲突,这样的例子还有很多。所以对于经常碰到这种冲突的开发人员来说,强烈希望改善这种局面。 想象下这样一个场景:你的应用不能依赖slf4j-log4j,别的开发不清楚,引入了其他类库,间接引入了这个依赖