MAVEN 依赖的优先原则
maven 依赖的优先原则
1. 依赖最短路径优先原则
一个项目 Demo 依赖了两个 jar 包,其中 A-B-C-X (1.0) , A-D-X (2.0)。由于 X (2.0) 路径最短,所以项目使用的是 X (2.0)。
2.pom 文件中申明顺序优先
如果 A-B-X (1.0) ,A-C-X (2.0) 这样的路径长度一样怎么办呢?这样的情况下,maven 会根据 pom 文件声明的顺序加载,如果先声明了 B,后声明了 C,那就最后的依赖就会是 X (1.0)。
3. 覆盖优先原则
子 pom 内声明的优先于父 pom 中的依赖。
实际使用
背景:FastJson 远程代码执行漏洞,攻击者可以通过提交精心构造的 JSON 数据实现远程代码执行,造成 OOM,项目中使用的 fastJson 版本 1.2.16 过低 存在该漏洞,现升级为 1.2.56
图 1.png
图 2.png
通过上面图一,图二可以看出实际项目 fastjson 属于被动依赖,项目没有主动引入。按照依赖的优先原则,
a-(durian-conf-client)-(fastjson1.2.16)
a-(rf-login)-(fastjson1.2.44)
durian-conf-client 在 rf-login 之前申明
所以最终项目使用的是 fastjson1.2.16。
最终项目申明 fastjson 1.2.56。