记一次maven冲突
背景:公司项目逐渐在向分布式系统转变,所以提前增加了分布式锁的功能,选择了zookeeper中间件,在utils工程引入了curator。配置如下<dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><excl
背景:公司项目逐渐在向分布式系统转变,所以提前增加了分布式锁的功能,选择了zookeeper中间件,在utils工程引入了curator。
配置如下
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</dependency>
出现问题
在一般的web项目中没有问题,可以正常引用utils工程,但是在SpringBoot 项目中不能正常引用。
单独的utils项目
SpringBoot引用工具项目
问题详情
zookeeper 的pom 文件依赖org.slf4j:slf4j-log4j12:1.7.25,本地仓库有该jar正常。
但是使用SpringBoot的项目引用utils,确显示需要org.slf4j:slf4j-log4j12:1.7.22。
分析应该是有其他的pom的依赖覆盖了zookeeper 的pom配置信息,没有加入zookeeper 没有org.slf4j:slf4j-log4j12的引用,所以不是其他的pom 进行依赖,而是dependencyManagement导致。
查看自己的dependencyManagement并没有对该项目有版本的管理,此时进行maven install 只是提示找不到1.7.22并未提供更多有用信息;使用idea的showdependency 也未看到有用的信息。
尝试多种方式均为找到具体的原因如排除等。
解决办法
使用 dependency:tree
http://t.zoukankan.com/kingsonfu-p-11800375.html
很不错的一个命令,但是maven的dependency:tree依旧不能显示我这边的问题,增加了一个-X 打印更详细的信息才解决问题(打印信息太多,建议重定向下输入到一个文件中)。
文件里很清楚显示了为什么当前的版本有问题。
dependency:tree -X
知道问题是什么原因了就很好解决了
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
根据规则dependencyManagement规则,引用jar没有版本就使用dependencyManagement里面指定版本号,在里面指定了版本就用指定的。why 还不行? 有谁清楚可以告知我。
最终解决办法
在外面的dependencyManagement里面再次指定了org.slf4j:slf4j-log4j12版本才搞定
更多推荐
所有评论(0)