maven冲突解决

主要目的是升级现有的jar包,排除传递依赖引起的冲突

maven 命令

mvn dependency tree

mvn dependency:tree命令可以查看当前项目的依赖关系。可以将当前POM的依赖关系按照树形结构展开。

[INFO] +- org.springframework:spring-context:jar:4.2.8.RELEASE:compile
[INFO] |  +- org.springframework:spring-aop:jar:4.2.8.RELEASE:compile
[INFO] |  |  \- aopalliance:aopalliance:jar:1.0:compile
[INFO] |  +- org.springframework:spring-beans:jar:4.2.8.RELEASE:compile
[INFO] |  \- org.springframework:spring-expression:jar:4.2.8.RELEASE:compile

上述树形结构里,\-表示当前父节点最后的子节点。

–Dverbose

加上这个参数,可以将当前所有的依赖关系都展示出来,包括来自不同处的依赖项。

[INFO] +- org.springframework:spring-context-support:jar:4.2.8.RELEASE:compile
[INFO] |  +- (org.springframework:spring-beans:jar:4.2.8.RELEASE:compile - omitted for duplicate)
[INFO] |  +- (org.springframework:spring-context:jar:4.1.1.RELEASE:compile - version managed from 4.2.8.RELEASE; omitted for conflict with 4.2.8.RELEASE)
[INFO] |  \- (org.springframework:spring-core:jar:4.1.1.RELEASE:compile - version managed from 4.2.8.RELEASE; omitted for conflict with 4.2.8.RELEASE)

–Dincludes

-Dincludes 可以进行参数过滤,如果需要查询spring相关的依赖,可以
mvn dependency:tree -Dverbose -Dincludes=*spring*:*spring*

[INFO] +- org.springframework:spring-context:jar:4.2.8.RELEASE:compile
[INFO] |  +- org.springframework:spring-aop:jar:4.2.8.RELEASE:compile
[INFO] |  |  +- (org.springframework:spring-beans:jar:4.2.8.RELEASE:compile - omitted for duplicate)
[INFO] |  |  \- (org.springframework:spring-core:jar:4.1.1.RELEASE:compile - version managed from 4.2.8.RELEASE; omitted for duplicate)
[INFO] |  +- org.springframework:spring-beans:jar:4.2.8.RELEASE:compile
[INFO] |  |  \- (org.springframework:spring-core:jar:4.1.1.RELEASE:compile - version managed from 4.2.8.RELEASE; omitted for duplicate)

当然,可以将输出结果导入到文本中。只需要在命令后加入”>a.txt”即可。

mvn help:effective-pom

上述命令可以将当前项目自己的POM已经从父类中继承的POM内容输出,可以输出到文本中。
mvn help:effective-pom>a.txt

mvn dependency:analyze

dependency:analyze是通过分析bytecode来输出报告。包含Used undeclared dependencies(使用但未定义的依赖项)和Unused declared dependencies(未使用但却定义的依赖项)。

  • Used undeclared dependencies
    该列表列出的是程序代码直接用到的、但并没在pom.xml里定义的依赖项。
  • Unused declared dependencies
    该列表列出的是程序代码没用到的、但在pom.xml里定义的依赖项。注意,该列表可能不准确,因为程序代码可能使用了反射技术,在运行时需要这些jar包存在。
  • dependency

    在dependency中,可以通过exclusions标签进行依赖排除。
    例如,排除spring

    <exclusions>
       <exclusion>
          <groupId>org.springframework</groupId>
          <artifactId>spring</artifactId>
       </exclusion>
    </exclusions>
    
    <exclusions>
       <exclusion>