-
maven 依赖准则
- 间接依赖最短优先: a>b>c 和 a >e>f>d>c, 则优先应用前者
- 申明程序优先: 若门路长度雷同, 则先申明优先.
-
抵触起因
maven 有传递依赖机制, 当 A 依赖 B, 引入 A 依赖时, 则 mave 在解析 A 时连同 B 一起引入.- A>B>C>G21(guava 20.0)
- E>F>G20(guava 21.0)
假如 pom 引入 A 和 E, 则 maven 会引入 guava 20.0 而不是 G21, 当程序中调用 G21 新加的办法或类时, 会跑出 ClassNotFoundException/NoSuchMethodError
-
排查
- 通过类 / 办法查找, 如能够找到则存在 jar 包抵触, 找不到则可能是短少 jar 包, 引入即可.
- 应用 mvn dependency:tree [-Dverbose -Dincludes=groupId:artifactId], 或 DIEA 插件 Maven Helper 查看依赖树
- 查看查找类中版本和 maven 依赖中的版本是否雷同
- 示例
报错: Caused by: java.lang.NoClassDefFoundError: org/springframework/core/env/EnvironmentCapable
查找类, 存在, 则 jar 包抵触, 援用的 spring-core 4.2.2
查看依赖树, 引入的是 spring-core3.0.7, 与类版本不统一
找到抵触 pom, 增加排除