Maven:Jar包冲突解决

关键词:Maven

问题复现

使用Java连接es报错

Exception in thread "main" java.lang.NoSuchFieldError: FAIL_ON_SYMBOL_HASH_OVERFLOW
        at org.elasticsearch.common.xcontent.json.JsonXContent.<clinit>(JsonXContent.java:57)
        at org.elasticsearch.common.xcontent.XContentType$1.xContent(XContentType.java:56)
        at org.elasticsearch.common.xcontent.XContentHelper.toXContent(XContentHelper.java:348)
        at org.elasticsearch.client.RequestConverters.createEntity(RequestConverters.java:686)
        at org.elasticsearch.client.RequestConverters.createEntity(RequestConverters.java:681)
        at org.elasticsearch.client.RequestConverters.search(RequestConverters.java:388)
        at org.elasticsearch.client.RestHighLevelClient.lambda$search$4(RestHighLevelClient.java:1094)
        at org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1760)
        at org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:1734)
        at org.elasticsearch.client.RestHighLevelClient.performRequestAndParseEntity(RestHighLevelClient.java:1696)
        at org.elasticsearch.client.RestHighLevelClient.search(RestHighLevelClient.java:1092)

原因是elasticsearch jar包里面的jackson-core的jar包和其他jar包产生冲突,其他jar也引用了jackson-core,导致有多个jackson-core,程序里面调用的jackson-core没有FAIL_ON_SYMBOL_HASH_OVERFLOW这个字段


Maven jar包冲突原理

假设pom中引入了A和E两个jar包,A和E各自也有需要引入的jar包

A->B->C->D(15.0):A中包含对B的依赖,B中包含对C的依赖,C中包含对D1的依赖,D1的version为15.0
E->F->D(16.0):E中包含对F的依赖,F包含对D2的依赖,假设是D2是同一个日志jar包,version为16.0

由于A,E都引用了D,但是D的版本不同,产生jar包冲突,此时Maven对于同一个jar包只会保留一个,Maven的保留规则为:

  • 1.最短路径优先
    如果有多个路径引用到D,就选取其中最短的路径对应的那个D作为最终的D引入项目,这点很容易理解,比如有个jar比如D是直接在pom里面引用的,它的路径长度就是1,它肯定比引其他包导致被D被关联引入的更符合使用的需求。

  • 2.最先声明优先
    如果路径长度都相同,则以最先声明的为准,就是pom文件哪个写在上面,如果路径长度相同,只能凭借前后声明拼运气了


使用Maven helper分析冲突

下载Maven helper插件


Maven helper

安装好后在工程目录中双击选中pom文件,就可以看到Dependency Analyzer


Dependency Analyzer

点击进入分析


ui冲突

左边框内每一个jar包都是冲突项,右边展示了具体该jar如何冲突,把它的来源路径全部展示出来,以jackson-core为例,有6个来源路径,其中5个是红色的代表被Maven冲突规则去除的,有一个白色的是最终被项目引入的,由此也说明Maven会通过简单规则将同一个jar包的仅一个版本引入项目。最终被引入的是hadoop-client这条路径的,原因是该路径最短只有2,spark_hive_2.11太长为3,而同为2的elasticsearch由于在pom中写在了hadoop-client的下面导致也被去除了。


解决方案

很明显应该保留下elasticsearch的jackson-core,由于已经知道了Maven的冲突保留规则,因此本例中可以直接把elasticsearch在pom中写到hadoop-client的上面


修改声明顺序

更改后在冲突UI中点击Reimport即可重新查看


修改后的冲突UI

此时elasticsearch变为白色成为最终保留下来的路径,重新打包FAIL_ON_SYMBOL_HASH_OVERFLOW问题解决。


以上只是搞正确了最后保留下来的胜利者正确,并没有避免冲突,基于冲突UI进一步操作,右键需要移除的jar包点击Exclude即可以避免冲突

exclude解决冲突

点击之后红色的消失,同时在pom里面自动加上了Exclude语句


自动增加Exclude
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,843评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,538评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,187评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,264评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,289评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,231评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,116评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,945评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,367评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,581评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,754评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,458评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,068评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,692评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,842评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,797评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,654评论 2 354

推荐阅读更多精彩内容