2 Maven 冲突解决

Wu Jun 2019-12-25 15:59:04
09 DevOps > 4 Maven

原文地址:https://www.jianshu.com/p/bbd5b0abcad1

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

1 maven 命令

1.1 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”即可。

1.2 mvn help:effective-pom

上述命令可以将当前项目自己的POM已经从父类中继承的POM内容输出,可以输出到文本中。

mvn help:effective-pom>a.txt

1.3 mvn dependency:analyze

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

2 排除依赖

dependency

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

例如,排除spring

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

排除所有

<exclusions>
    <exclusion>
        <groupId>*</groupId>
        <artifactId>*</artifactId>
    </exclusion>
</exclusions>