Maven冲突解决-ide插件Maven Helper与命令mvn dependency:tree

225 阅读1分钟

什么Maven冲突

Maven可以管理依赖,但也会同时代码jar依赖问题。比如某个项目,引入第三包JarA和JarB,同时 JarA依赖JarC 1.0 ,JarA依赖JarC 2.0 ,这样项目里JarC就会存在2个版本。 Maven会依赖 " 依赖路径最短优先原则 " 来决定使用哪个版本。而另外一个未被使用的就是依赖冲突。绝大多数情况冲突不会对系统产生影响,但在某些情况下会提示 “找不到类的提示”

如何解决冲突

解决依赖冲突的方法,就是使用Maven提供的 <exclusion> 标签,如:


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
    <version>2.1.1.RELEASE</version>

    <!--先排除-->
    <exclusions>
        <exclusion>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>

插件Maven Helper查找及解决冲突

IDE安装Maven Helper

image.png

IDE手动安装

plugins.jetbrains.com/plugin/7179…

从插件市场下载后,选择Plugins --> instll plugin form disk

image.png

image.png

image.png

使用mvn dependency命令

mvn dependency:tree语法

tree-mojo

[groupId]:[artifactId]:[type]:[version]

输入依赖关系
mvn dependency:tree

输入依赖关系到文件
mvn dependency:tree -D outputFile=outputFile.txt

只查看依赖树中包含 groupId 为 org开头的依赖
mvn dependency:tree -Dincludes=org.\

不查看依赖树中包含 groupId 为 org开头的依赖
mvn dependency:tree -Dexcludes=org.\

清空本地依赖【在某些jar包不更新时候特别好用】,本地repository中清理这些依赖,重新从远程repository下载
mvn dependency:purge-local-repository

image.png

mvn dependency:analyze-only   分析依赖
声明且使用的依赖
未声明但使用的依赖
声明了但是没有使用的依赖

image.png