吐槽背景:

前阵子领导要求一应服务上Docker,其中包含一个连接Hadoop集群,认证kerberos后通过将SQL传给Inceptor(hive)查数据这么一个功能。

老项目部署条件是:Tomcat7 + 行内框架(类似SSM) + JDK1.7.0_79 + Linux
新环境是把 Tomcat7 升级到 Tomcat8,JDK升级到 Open1.8,加Docker;

本来是想就相当于把部署的东西平移到docker上,换汤不换药,稀松平常就好,结果因为 Driver 驱动包引发了一个血案!

InceptorDriver 驱动包里有大量的非依赖方式引入的包,导致 mvn dependency 根本查不出是哪里有冲突,而tomcat8 又会因为环境问题导致加载类顺序不同使项目在这边好,到了服务器上就不行的问题,然后一报错就是sun.sec…某个类或方法找不到。

最开始通过调整 tomcat8 的 Context.xml 的 preresource 来优先加载有冲突的jar,但是行里投产tomcat这种介质是一致的还不许改,就算硬改,当容器重启时,从新拉介质又完蛋。。。

最终还是一个同事因为他连接的hbase 没有引用InceptorDriver 只引用了Hadoop-client(厂商提供的,auth、common等集合体)我突然想到了 InceptorDriver 里面可能有与Hadoop-Auth重合的部分。因为在调整tomcat8的Context.xml时,将hadoop-auth这个jar优先加载可以回避这个问题,然后我将 InceptorDriver 解压一看,果然如我所料,手动将 InceptorDriver 重合Hadoop-auth部分删除掉,kerberos 认证通过,问题解决。

重点:
当发生什么什么类找不见、方法找不见的时候,先看看

1)是不是真的没有引对应的依赖
2)如果依赖已经引用,那多半是 jar 冲突
a) mvn dependency: tree -Dverbose 找到有冲突的地方,可以将结果通过正则匹配出来 :grep “conflict”
b) 查看有哪些地方引用到了这个jar,都是什么版本,哪个是你需要的
mvn dependency: tree -Dverbose -Dincludes=groupId:artifactId
3)如果没有发现有冲突,则有可能是某些依赖不是通过mvn传递的,而是,直接手动打入,或是“不小心”与别人的包类全路径撞车的情况,这个时候基本是先改自己的,再改依赖的,如果框架和框架撞车,那就跑路吧,嘿嘿嘿…

记一篇JAR冲突的问题:Inceptor-Ddriver-4.7.1相关推荐

  1. 《大道至简》的幕后故事(2):“愚公移山记”人物篇

    引子 ======  "愚公移山记"文言和白话两篇附录,是<大道至简>第二版中重要的组成部分.但我们这些读惯了技术书的人,大概是不会象文科生一样,一边考证着一边读古文, ...

  2. 《大道至简》的幕后故事(2):“愚公移山记”人物篇 1

    2007年04月18日 01:05:00 引子 ====== "愚公移山记"文言和白话两篇附录,是<大道至简>第二版中重要的组成部分.但我们这些读惯了技术书的人,大概是 ...

  3. 《大道至简》的幕后故事(5):“愚公移山记”军事谋略篇

    2007年05月01日 00:53:00 引子 ========== 上一节写的地理,这一节只讲策略.我自己读时,时时觉得<大道至简>一书写到末了,未见得有一篇古文精彩,只是这篇古文,愿细 ...

  4. 《大道至简》的幕后故事(5):“愚公移山记”军事谋略篇 1

    引子 ========== 上一节写的地理,这一节只讲策略.我自己读时,时时觉得<大道至简>一书写到末了,未见得有一篇古文精彩,只是这篇古文,愿细读的人并不太多罢了. 这篇军事谋略,与工程 ...

  5. Maven Jar冲突解决方案

    MavenJar冲突解决方案 记一次在做项目过程中 遇到的jar冲突问题 话不多说 先报出错异常 //异常在这 SLF4J: Detected both log4j-over-slf4j.jar AN ...

  6. JAR冲突问题的解决以及运行状态下如何查看加载的类

    今天碰到群里小伙伴问,线上程序好像有多个不同版本的Netty包,怎么去看到底加载了哪一个? 在说如何看之前,先来说说,当你开始意识到项目里有多个不同版本的Jar包,都是因为遇到了这几个异常: 1.ja ...

  7. 第二空间计算机最新破解,我的J4125黑群晖折腾记 - 软件篇:无需U盘引导及固态硬盘扩充空间容量法...

    我的J4125黑群晖折腾记 - 软件篇:无需U盘引导及固态硬盘扩充空间容量法 2020-10-16 18:33:49 53点赞 418收藏 25评论 [前言]:继上一篇<我的J4125黑群晖折腾 ...

  8. 记一次validator jar冲突导致的启动异常

    2019独角兽企业重金招聘Python工程师标准>>> 场景: jersey启动报了一个异常 java.lang.NullPointerException: null at org. ...

  9. 工作-2017.07.30-周记总结篇(一)

    [MySQL乱码问题] [MyBatis动态查询] [SQL语法中的Select count(*)和count(1)的用法及其他连接查询的使用方法] [MyBatis中的association标签有什 ...

  10. Android 关于::app:clean :app:preBuild UP-TO-DATE :app:preDebugBuild UP-TO-DATE,引用jar冲突问题...

    错误提示:  Information:Gradle tasks [:app:clean, :app:generateDebugSources, :app:generateDebugAndroidTes ...

最新文章

  1. 简化PHP开发的10个工具
  2. mxnet基础到提高(22)-C++-常量和变量
  3. SpringCloudGateway 集成 nacos 整合实现动态路由_04
  4. 计算机进位法,计算机基础知识--进位计数制.docx
  5. js中prototype用法
  6. Linux (x86) Exploit 开发系列教程之八 绕过 ASLR -- 第三部分
  7. excel中如何动态地创建控件以显示查询结果_一起学Excel专业开发02:专家眼中的Excel及其用户...
  8. java的VIRT高的问题理解
  9. php fopen下载文件,php fopen下载远程文件的函数 | 学步园
  10. VS Code 中文注释显示乱码
  11. sql92和sql99的区别
  12. 谷歌开源缓存框架Guava Cache
  13. linux格式化后恢复 vmdk恢复,根据flat.vmdk文件恢复磁盘(完善版)
  14. Nicholas C. Zakas谈怎样才能成为优秀的前端工程师
  15. maven下载Nexus私服jar包,报错Not authorized
  16. 共享纸巾机系统开发,关于Switch的使用
  17. AI面相手相V3.2.0无限多开版h5公众号版本源码(含搭建教程+运营文案图片)
  18. IDEA 官方最认可的神级框架!SpringBoot 已成气候!
  19. 单片机编程实现用网址域名获取服务器IP,超简单,一句话
  20. 计算机如何获取目标ip,如何在自己的电脑查看别人电脑的ip地址?教你,马上成为电脑高手...

热门文章

  1. python怎么判断日期是星期几_【Java编程基本功】(八)逆序输出、是否为回文数,判断星期几,升序排列...
  2. Windows10 的简单脚本 杀死所有表格程序
  3. Nvidia搞笑Intel:CPU vs GPU
  4. docker下配置linux7.2
  5. jQuery的AJAX请求中contentType和dataType的区别
  6. gradle 区分系统_Android 学习记录_系统结构, res 目录, App 目录下的 build.gradle 文件...
  7. mysql主从复制不同步案例_mysql主从复制不同步的问题
  8. 编写dll 关于declspec(dllexport)和declspec(dllimport)
  9. 使用批处理文件,自动设置计算机IP地址
  10. 网络工程师 名词解释