背景:公司项目逐渐在向分布式系统转变,所以提前增加了分布式锁的功能,选择了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版本才搞定

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐