使用依赖树解决冲突

可以展开项目的依赖关系树以显示依赖关系冲突。例如,要找出 Maven 依赖插件使用 Commons Collections 2.0 的原因,我们可以在项目目录中执行以下命令:

mvn dependency:tree -Dverbose -Dincludes=commons-collections

详细标志指示依赖关系树显示从已解决的依赖关系树中省略的冲突依赖关系。在这种情况下,目标输出:

[INFO] [dependency:tree]
[INFO] org.apache.maven.plugins:maven-dependency-plugin:maven-plugin:2.0-alpha-5-SNAPSHOT
[INFO] +- org.apache.maven.reporting:maven-reporting-impl:jar:2.0.4:compile
[INFO] |  \- commons-validator:commons-validator:jar:1.2.0:compile
[INFO] |     \- commons-digester:commons-digester:jar:1.6:compile
[INFO] |        \- (commons-collections:commons-collections:jar:2.1:compile - omitted for conflict with 2.0)
[INFO] \- org.apache.maven.doxia:doxia-site-renderer:jar:1.0-alpha-8:compile
[INFO]    \- org.codehaus.plexus:plexus-velocity:jar:1.1.3:compile
[INFO]       \- commons-collections:commons-collections:jar:2.0:compile

因此,我们可以看到 Commons Collections 2.0 被选择而不是 2.1,因为它更接近,并且默认情况下,Maven 使用最近获胜策略解决版本冲突。

更具体地说,在详细模式下,依赖关系树显示被省略的依赖关系: 与另一个重复;与他人的版本和/或范围冲突;并在依赖树中引入一个循环。

3.0+ 版本中的详细标志支持

自 maven-dependency-plugin 3.0 ( MDEP-494 )以来,已删除对详细标志的支持。在重新引入适当的支持之前,可以使用旧版本获得额外的输出。

mvn org.apache.maven.plugins:maven-dependency-plugin:2.10:tree -Dverbose=true