用Maven定位和解决依赖冲突
一、依赖冲突的常见表现
表现 | 说明 |
---|---|
ClassNotFoundException | 类文件存在但版本不兼容 |
NoSuchMethodError | 方法签名在不同版本中不一致 |
NoClassDefFoundError | 依赖的依赖缺失 |
Unexpected Behavior | 不同版本类实现的差异导致逻辑错误 |
二、定位冲突依赖的4种方法
2.1 使用Maven命令分析依赖树
# 查看完整依赖树
mvn dependency:tree
# 过滤指定依赖(示例查找guava)
mvn dependency:tree -Dincludes=com.google.guava:guava
示例输出
[INFO] com.example:my-project:jar:1.0.0
[INFO] +- com.moduleA:moduleA:jar:2.0:compile
[INFO] | \- com.google.guava:guava:jar:30.0-jre:compile
[INFO] \- com.moduleB:moduleB:jar:3.1:compile
[INFO] \- com.google.guava:guava:jar:31.0.1-jre:compile
2.2 使用IDE可视化工具
- IntelliJ IDEA:右键pom.xml > Maven > Show Dependencies
- Eclipse:右键项目 > Maven > Show Dependencies
2.3 使用Maven Enforcer插件
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>enforce</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<dependencyConvergence/>
</rules>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build