前段时间写代码的时候想借助一下fastjson的Feature.OrderedField来解决json乱序的问题,只需要增加一个参数即可,像下面这样

JSON.parseObject("...", Feature.OrderedField)

,idea检查是没有任何问题的,但是跑单元测试的时候竟然报NoSuchFiledError(找不到Feature.OrderField ),我猜测可能是jar包冲突了,所以下一步就是找出到底是和哪个jar包冲突了。

解决方法一

最开始我以为是maven传递依赖了老版本的fastjson包,所有我尝试使用“mvn dependency:tree”来输出项目中的所有jar包依赖一看究竟,但是结果让人大跌眼镜,整个项目只依赖了1.2.58版本的fastjson包,传递依赖的猜测随之破灭。

解决方法二

我仔细分析了报错的堆栈信息,报错只是说Field找不到,但是Field所属的Class是可以找到的,那有没有一种办法可以通过Class找到所属的jar包呢?最终通过度娘找到了一种办法,贴出来供大家使用

try{JSON.parseObject("...", Feature.OrderedField)
}catch(Throwable e){String loc = "";String urlLoc = "";try {loc =<strong>Feature.class.getProtectionDomain().getCodeSource().getLocation().getFile();urlLoc =  URLDecoder.decode(loc, "UTF-8");</strong>} catch (Throwable e2) {}logger.info("** loc=" + LOCATION + "; URLLoc=" + URLLOCATION);
}

推荐一个艿艿写的 6000+ Star 的 SpringBoot + SpringCloud + Dubbo 教程的仓库:https://github.com/YunaiV/SpringBoot-Labs

水落石出

最终找到了导致冲突的jar原来是公司自研的消息队列提供的producer client,在这个jar包内部将fastjson的源码直接打到了jar包里面,所以在不同的jar包内竟然出现了包名和类名都一样的class,下面这个图是jar包内部的目录结构,这种使用第三方工具包的方式我也是第一次见,感觉挺坑的(耦合太严重),最终我没有使用fastjson来解决我的问题,而是借助了Gson将这个问题绕过去了。

总结

主要介绍了两种找出冲突jar包的方式,第一种是使用“mvn dependency:tree”的方式,但是这种方式存在局限性,就像前面说到的那种,两个看似不相干的jar包内竟然出现了包名和类名都一样的class,第二种是直接通过class对象获取jar包全路径的方式,这种方式更通用,但是需要改动一点代码。

jar 包又冲突了?如何快速确定与哪个 jar 包冲突?相关推荐

  1. git pull 代码库时提示冲突需Merge 快速解决代码同步遇到的冲突问题 so easy的方法

    前言 git pull 代码库时提示冲突需Merge 快速解决代码同步遇到的冲突问题 so easy的方法. 问题 1.> git pull origin master 提示信息:error:  ...

  2. maven(android-maven-plugin3.8.0)打包apk无法启动,apklib依赖包的资源索引出错(R文件与主模块冲突)问题解析

    近期在用maven,遇到了一个问题,用maven打出的apk有问题无法启动,但是用idea打包的就是正常的. 日志中显示的问题是,一个apklib形式的依赖包中的一个资源出现了问题.反编译对比mave ...

  3. base64是哪个jar包的_涨知识 | 用maven轻松管理jar包

    前言 相信只要做过 Java 开发的童鞋们,对 Ant 想必都不陌生,我们往往使用 Ant 来构建项目,尤其是涉及到特别繁杂的工作量,一个 build.xml 能够完成编译.测试.打包.部署等很多任务 ...

  4. python软件怎么使用-Python快速入门—如何选择使用包管理工具?

    原标题:Python快速入门-如何选择使用包管理工具? 源 | cnblogs文 | 包子 在Python环境中已经有很多成熟的包,可以通过安装这些包来扩展我们的程序. 例如,很多时候Python开发 ...

  5. gradle 上传jar包_gradle 打包jar上传到nexus 同时上传源码jar

    以我们实际项目为例,项目中后台和前台单独开发,之间通过dubbo接口调用,后台提供服务接口,具体实现对前台隐藏,前台使用某个服务时,下载相应依赖然后调用,因此需要将服务接口打成jar包,上传到仓库中, ...

  6. android studio 快速删除无用的import包

    今天,简单讲讲如何使用  android studio 快速删除无用的import包. 在开发过程中,随着项目的迭代,文件内部分import 可能早已经不用了,对于这种无用的 import,我们不 ...

  7. python都有什么包_常用的Python包有哪些,如何快速掌握Python编程

    Python入门简单.功能强大,是很多想要入行IT开发行业人士的主要选择.Python包可以帮助Web开发人员快速和容易地创建应用程序和功能,因此很多企业在招聘时都会考察求职者对于Python包的掌握 ...

  8. 解决:single failed: For artifact {null:null:null:jar}: The groupId cannot be empty. 把工程依赖的jar包打到入jar中

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 1. 执行 mvn clean install 报错: Execution make-assembl ...

  9. Java:Linux上java -jar xxx.jar命令执行jar包时出现Error: Invalid or corrupt jarfile xxx.jar解决方案

    Java:Linux上java -jar xxx.jar命令执行jar包时出现Error: Invalid or corrupt jarfile xxx.jar解决方案 参考文章: (1)Java:L ...

  10. 实战详解Maven部署(deploy)jar到私有仓库Nexus及如何引入私仓jar包

    1 缘起 本来只打算测试jar包部署(deploy)到私仓, 可是,发现部署后与预期有些不一样,就又查了些资料, 实际验证了一下对应的功能, 比如,部署jar包区分快照版和发行版, 部署时需要使用不同 ...

最新文章

  1. Matlab将多项式的系数设为0
  2. hdu1394 Minimum Inversion Number 线段树和树状数组
  3. GetHashCode() 的研究
  4. 点云网络的论文理解(一)-点云网络的提出 PointNet : Deep Learning on Point Sets for 3D Classification and Segmentation
  5. openpyxl方法记录
  6. ERP text object hard code
  7. 【渝粤题库】国家开放大学2021春2096经济法学题目
  8. 九、一篇文章帮助你读懂CSS属性:vertical-align 垂直对齐
  9. 使用SQL Server 2005作业设置定时任务
  10. 点到曲线的距离公式_推导点到直线的距离公式到底有多少种方法?
  11. 为什么使用getrequestdispatcher跳转出现404_网站出现404错误时的处理方法
  12. absolute 必须 relative_想搞BLDC电机控制,就必须要懂的角度传感器
  13. Linux下进程信息的深入分析
  14. ssm框架中mysql的分页_SSM框架中mapper层,增删改查,如何实现
  15. oracle 关系 表 视图_在Oracle数据库中,表和视图的区别与联系
  16. 在ubuntu上一键安装TIM的脚本
  17. 数字信号处理及其MATLAB实现总结
  18. 探索性测试--极限测试法
  19. [复现论文程序图]High Speed Continuous Variable Source-Independent Quantum Random Number Generation...
  20. 浅谈一下“敏捷开发”

热门文章

  1. 我的C++学习历程(old)
  2. 固定大小容器内,不同比例的图片高度撑满,宽度居中裁剪
  3. 数据库事务系列-事务模型基础
  4. 完整iOS APP发布App Store上架流程
  5. 按home退出程序到后台后再打开崩溃的问题
  6. 黑盒測试(一)-----边界值測试
  7. 也许MVC不该重写Url格式?
  8. 高手快帮忙,关于replace和正者表达式的问题
  9. VS 2005 文本编码小技巧 --中文亂碼問題解決
  10. 基于FFmpeg音视频流同步