此文已由作者翟曜授权网易云社区发布。

欢迎访问网易云社区,了解更多网易技术产品运营经验。

最近在测试过程中,遇到了几次maven传递依赖冲突的问题,所以记录下解决的过程,遇到类似问题供参照。

问题现象:

某服务不可用,查看启动log有报错信息,例如:

java.lang.NoSuchMethodError,类名和方法名看起来,初步判断出是在某个依赖的jar包里。

排查步骤:

首先确认是哪个jar包。根据类名进行搜索,确认jar包为:netty。同时发现本地依赖的jar包版本都有多个,已经基本可断定是依赖版本冲突了。

确定是netty,那么看下具体是哪些地方引入了netty,在应用根目录打印依赖树:mvn dependency:tree>tree.txt

发现报错的nkv中引入的版本号是3.6.3.Final,dubbok引入的版本号是3.2.5.Final。可以断定是maven传递依赖的冲突了。

也可以在测试服务部署机器的tomcat lib目录下查找,确实是有两个版本的依赖:

解决办法:

附:概念解释

1.Maven依赖传递

假如有Maven项目A,项目B依赖A,项目C依赖B。那么我们可以说 C依赖A。也就是说,依赖的关系为:C—>B—>A。

那么我们执行项目C时,会自动把B、A都下载导入到C项目的jar包文件夹中。这就是依赖的传递性。

2.依赖传递的排除

如上,C—>B—>A。加入现在不想执行C时把A下载进来,那么我们可以用 <exclusions>标签。

<dependencies>

<dependency>

<groupId>B</groupId>

<artifactId>B</artifactId>

<version>0.0.1</version>

<exclusions>

<exclusion>

<!--被排除的依赖包坐标-->

<groupId>A</groupId>

<artifactId>A</artifactId>

<version>0.0.1</version>

</exclusion>

</exclusions>

</dependency>

</dependencies>

所以,上述错误现象的解决办法就是:排除掉低版本依赖,引入高版本依赖。

提交代码,再部署,服务启动ok,调用ok。

免费体验云安全(易盾)内容安全、验证码等服务

更多网易技术、产品、运营经验分享请点击

相关文章:
【推荐】 为何要在网站上设置的验证码
【推荐】 网页设计简史看设计&代码“隔膜”
【推荐】 限时购校验小工具&dubbo异步调用实现限

快速发现并解决maven依赖传递冲突的更多相关文章

  1. 解决maven依赖传递中的版本冲突问题

    通常情况下,我们都比较喜欢使用maven进行项目管理,要加个依赖包也非常简单,不需要到处去下载jar包,当然除了maven之外,也还有一些非常不错的工具.在使用maven进行项目依赖管理的时候,有时候 ...

  2. Maven依赖版本冲突的分析及解决小结

    1:前言 做软件开发这几年遇到了许多的问题,也总结了一些问题的解决之道,之后慢慢的再遇到的都是一些重复性的问题了,当然,还有一些自己没有完全弄明白的问题.如果做的事情是重复的,遇到重复性问题的概率也就 ...

  3. Maven依赖传递、依赖传递排除、依赖冲突

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6628429.html  一:Maven依赖传递 假如有Maven项目A,项目B依赖A,项目C依赖B.那么我们可 ...

  4. 解决maven依赖冲突问题

    解决maven依赖冲突问题 1.idea 安装maven helper插件 2.打开pom.xml文件 底部多出一个Dependency Analyzer选项 点开这个选项 找到冲突,点击右键,选择E ...

  5. maven课程 项目管理利器-maven 3-8 maven依赖传递 4星

    本节主要讲了 1 maven依赖传递 本地项目路径:F:\xiangmu3\Xin\FuQiang\maven\code 2 maven排除依赖 3 注意事项 4 零散知识点 1 maven依赖传递 ...

  6. 解决maven依赖冲突,这篇就够了!

    一.前言 什么是依赖冲突 依赖冲突是指项目依赖的某一个jar包,有多个不同的版本,因而造成了包版本冲突. 依赖冲突的原因 我们在maven项目的pom中 一般会引用许许多多的dependency.例如 ...

  7. IDEA 解决 Maven 依赖冲突的高能神器,这一篇够不够?

    ​ 1.何为依赖冲突 Maven是个很好用的依赖管理工具,但是再好的东西也不是完美的.Maven的依赖机制会导致Jar包的冲突.举个例子,现在你的项目中,使用了两个Jar包,分别是A和B.现在A需要依 ...

  8. Java开发学习(二十九)----Maven依赖传递、可选依赖、排除依赖解析

    现在的项目一般是拆分成一个个独立的模块,当在其他项目中想要使用独立出来的这些模块,只需要在其pom.xml使用<dependency>标签来进行jar包的引入即可. <depende ...

  9. 用好这几个技巧,解决Maven Jar包冲突易如反掌

    前言 大家在项目中肯定有碰到过Maven的Jar包冲突问题,经常出现的场景为: 本地运行报NoSuchMethodError,ClassNotFoundException.明明在依赖里有这个Jar包啊 ...

随机推荐

  1. iOS 流布局 UICollectionView使用(简单使用)

    简介 UICollectionView是iOS6之后引入的一个新的UI控件,它和UITableView有着诸多的相似之处,其中许多代理方法都十分类似.简单来说,UICollectionView是比UI ...

  2. 我的Java开发学习之旅------>Java经典排序算法之插入排序

    一.算法原理 插入排序法:所谓插入排序法乃是将一个数目插入该占据的位置. 假设我们输入的是 "53,27,36,15,69,  42" 我们从第二个数字开始,这个数字是27,我们的 ...

  3. [Android] Gradle 安装

    Gradle安装非常简单,只要从官网下载压缩包,解压,修改一下环境变量即可. 笔者写本篇随笔时,版本是1.12. Windows下安装 1 到官网(http://www.gradle.org/down ...

  4. Carthage的使用

    1.安装Carthage https://github.com/Carthage/Carthage/releases 2.进入Cartfile文件所在的目录地址 cd 拖入文件Cartfile,把最后 ...

  5. html--<meta>设置缓存

    html头文件设置常用之<meta>设置缓存   <meta http-equiv="pragma" content="no-cache"&g ...

  6. Makefile中的$(@:_config=)什么意思?【转】

    本文转载自:https://blog.csdn.net/a8082649/article/details/24252093 已经编译出bin文件了,现在研究一下makefile,把遇到的问题记录下来: ...

  7. myeclipse 安装flex插件后变为中文 修改配置文件切换到英文界面

    解决办法: 1. cmd 敲命令进入安装目录,运行myeclipse.exe -nl en后,启动为英文 在安装目录下新建txt,改名为myeclipse.bat,将上面那行命令写入保存,再发送快捷方 ...

  8. SPOJ - SUBST1 New Distinct Substrings —— 后缀数组 单个字符串的子串个数

    题目链接:https://vjudge.net/problem/SPOJ-SUBST1 SUBST1 - New Distinct Substrings #suffix-array-8 Given a ...

  9. LightOJ - 1265 Island of Survival —— 概率

    题目链接:https://vjudge.net/problem/LightOJ-1265 1265 - Island of Survival    PDF (English) Statistics F ...

  10. static语句块的执行时间

    package utfTest; public class Test01 { public static void main(String[] args) { //Person.show(); Sys ...