Home Maven如何查看依赖冲突
Post
Cancel

Maven如何查看依赖冲突

什么是依赖冲突

Maven是个很好用的依赖管理工具,但是再好的东西也不是完美的。Maven的依赖机制会导致Jar包的冲突。举个例子,现在你的项目中,使用了两个Jar包,分别是A和B。现在A需要依赖另一个Jar包C,B也需要依赖C。但是A依赖的C的版本是1.0,B依赖的C的版本是2.0。这时候,Maven会将这1.0的C和2.0的C都下载到你的项目中,这样你的项目中就存在了不同版本的C,这时Maven会依据依赖路径最短优先原则,来决定使用哪个版本的Jar包,而另一个无用的Jar包则未被使用,这就是所谓的依赖冲突。

如何查看依赖冲突

使用Maven命令:

1
2
cd <含有pom.xml的文件夹>
mvn dependency:tree -Dverbose -DoutputFile=<文件名>.txt

-(io.netty:netty-common:jar:4.0.56.Final:compile - omitted for duplicate表示存在依赖冲突。
-(io.netty:netty-common:jar:4.0.56.Final:compile - omitted for conflict with 4.1.36表示存在依赖冲突并且强制使用了4.1.36版本。

如何解决依赖冲突

解决依赖冲突的方法,就是使用Maven提供的标签,就像下面这样:

1
2
3
4
5
6
7
8
9
10
11
<dependency>    
  <groupId>org.apache.logging.log4j</groupId>    
  <artifactId>log4j-core</artifactId>    
  <version>2.10.0</version>    
  <exclusions>        
    <exclusion>        
      <artifactId>log4j-api</artifactId>        
      <groupId>org.apache.logging.log4j</groupId>             
    </exclusion>    
  </exclusions>
</dependency>

log4j-core本身是依赖了log4j-api,但是因为一些其他的模块也依赖了log4j-api,并且两个log4j-api版本不同,所以我们使用标签排除掉log4j-core所依赖的log4j-api,这样Maven就不会下载log4j-core所依赖的log4j-api了,也就保证了我们的项目中只有一个版本的log4j-api。

This post is licensed under CC BY 4.0 by the author.