关于maven:jar包冲突解决

31次阅读

共计 571 个字符,预计需要花费 2 分钟才能阅读完成。

  1. maven 依赖准则

    1. 间接依赖最短优先: a>b>c 和 a >e>f>d>c, 则优先应用前者
    2. 申明程序优先: 若门路长度雷同, 则先申明优先.
  2. 抵触起因
    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

  3. 排查

    1. 通过类 / 办法查找, 如能够找到则存在 jar 包抵触, 找不到则可能是短少 jar 包, 引入即可.
    2. 应用 mvn dependency:tree [-Dverbose -Dincludes=groupId:artifactId], 或 DIEA 插件 Maven Helper 查看依赖树
    3. 查看查找类中版本和 maven 依赖中的版本是否雷同
  4. 示例
    报错: Caused by: java.lang.NoClassDefFoundError: org/springframework/core/env/EnvironmentCapable
    查找类, 存在, 则 jar 包抵触, 援用的 spring-core 4.2.2

查看依赖树, 引入的是 spring-core3.0.7, 与类版本不统一

找到抵触 pom, 增加排除

正文完
 0