栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

gradle中es多版本冲突问题解决

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

gradle中es多版本冲突问题解决

gradle中es多版本冲突问题解决
  • 问题描述
  • 问题现象
  • 解决思路
    • 定位报错位置
    • 验证猜想
    • 明确目标
    • 解决问题
  • 踩到的坑

问题描述

在项目开发中 全局使用的es版本为6.8.17 但是其中metric项目因业务原因 使用的es版本为6.5.4 所以项目运行时 根据gradle加载依赖规则 自动使用了高版本的jar包 两个包中的log4j版本一致 导致项目无法启动

问题现象

解决思路 定位报错位置

根据报错信息 发现报错路径是org.elasticsearch/elasticsearch/6.8.17 但我metric服务的依赖为:

dependencies {
            compile 'org.elasticsearch:elasticsearch:6.5.4'
            compile 'org.elasticsearch.client:transport:6.5.4'
        }

并没有直接依赖6.8.17 所以怀疑是间接依赖导致

验证猜想

在查看gradle依赖关系的时候 (./gradlew 模块名:dependencies) 看到依赖关系如下

明确目标

看到依赖情况 那现在的目的就是要去掉services-common下的es版本
由于services-common是整体依赖 不能完全去掉 且为全局引用

    subprojects {
        if (project != project(':services:common')) {

            mainClassName = 'com.networknt.server.Server'

            dependencies {
                compile project(':services:common')
            }
        }
    }
解决问题

但目前需要自定引用 所以要在全局引用去掉本模块

            if(project != project(':services:ics-metric')){
                dependencies {
                    compile project(':services:common')
                }
            }

然后在模块中 做自定义引用

            compile (project(':services:common-ics')){
                transitive = true
                exclude group: "org.elasticsearch", module: 'elasticsearch'
                exclude group: "org.elasticsearch.client", module: 'elasticsearch-rest-high-level-client'
            }

再去看依赖关系时发现services-common下面除了es的包 都引进来了 项目正常启动 问题解决

踩到的坑
  • 不要过分依赖idea的ctrl跳转 会跳转进错误的包 要以日志为准
  • compile 因用project的时候必须要用()括起来
  • transitive = true 间接依赖开关要打开 不然只会对第一层依赖生效
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/353844.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号