Gradle 构建 elastic-job 项目的奇怪依赖问题
- 按照官网的说法, gradle 的配置如下:
1 | compile ('com.dangdang:elastic-job-lite-core:2.1.5') |
- 这样配置后,写好示例代码,发现始终连接不上 zookeeper,抛出以下错误:
1 | *************************** |
一开始我以为是搭建的 zookeeper 环境有问题,但是用其他工具可以连接的上
又怀疑是 zookeeper 的版本问题,查看了
com.dangdang:elastic-job-common-core:2.1.5
, 发现其依赖的 zookeeper 版本是org.apache.zookeeper:zookeeper:3.5.3-beta
于是又用 docker 搭建了个 3.5.3-beta 的版本的 zookeeper 单机版
结果问题依旧…….
中间查找问题花费了很长的时间…..
后来把官方的 demo clone 到本地跑次看看,官方的 demo 仅仅依赖一个包
com.dangdang:elastic-job-lite-core:2.1.5
发现这个 demo 没有问题,可以连接的上 zookeeper
对比发现2个项目的依赖版本号不一致
看到 demo 里依赖的
org.apache.curator:curator-framework
和org.apache.curator:curator-recipes
都是 2.10.0, 而我引入的版本却是gradle 上的最新版 4.0.1, 而且也能看到2者的 zookeeper 的版本也不一致,一个是 3.4.6,一个是 3.5.3-beta问题所在找到了
解决问题
1 | compile ('com.dangdang:elastic-job-lite-core:2.1.5') |
手动声明版本为 2.10.0
问题解决,但是为什么 gradle 会造成这样的问题? 为什么传递依赖时, gradle 会去找最新的依赖版本? 这些问题我还没搞清楚….
日后搞清楚了,或者有眉目了,再来更新这篇文章.