当我们在线上运行项目时,依赖很多jar包,有时候某个类的全限定名,在多个包中出现,而某个包中的类的方法没有,而且在类加载时,刚好加载了这个类,可能会报找不到方法,或者找不到类的异常,这种情况就可能是类冲突:

如:

java.lang.NoSuchMethodError: com.google.common.base.Objects.toStringHelper(Ljava/lang/Object;)Lcom/google/common/base/Objects$ToStringHelper;

这是可能就需要找一下到底是哪些依赖的jar包中包含了 :com.google.common.base.Objects 这个类,但是我们总不能一个个依赖jar包解压去找吧,如果依赖比较多的话,会有好几百个,不仅耗时耗力,还可能会中风,下面介绍一种使用shell脚本来检索都是哪些jar包中包含了异常中找不到的类或方法,就以上述为列,我们找一下com.google.common.base.Objects这个类在哪些jar包中出现过,方便我们去除掉冲突:

find_class.sh

脚本命令:

#!/bin/sh

find_dir=$
find_key=$ jars=`find $find_dir -name '*.jar'`
for jar in $jars
do
ret=`jar tvf $jar | grep $find_key`
if [ "$?" = "" ]; then
echo -e "\e[1;34m${jar}\e[0m: \n\e[2;34m${ret}\e[0m"
fi
done wars=`find $find_dir -name '*.war'`
for war in $wars
do
ret=`jar tvf $war | grep $find_key`
if [ "$?" = "" ]; then
echo -e "\e[1;34m${war}\e[0m: \n\e[2;34m${ret}\e[0m"
fi
done

使用方式:

./find_class.sh <dir_path> <class_name>

示例:找一下com.google.common.base.Objects这个类在哪些jar包中出现过

./find_class.sh lib/ com.google.common.base.Objects

我们看到在guava-21.0.jar和hive-exec-1.2.0.jar中都出现了,且类全限定名相同,这是我们把不需要的jar包去除,依赖冲突就解决了

通过shell脚本排查jar包中类冲突的更多相关文章

  1. linux下shell脚本启动jar包

    本文采用的jar包是通过idea下maven打包的springboot项目. 写这个shell脚本是为了在linux下方便启动jar包时不用输入太多的shell命令,将启动脚本的一系列shell命令整 ...

  2. 简易shell脚本启动jar包

    可参考博客: Shell脚本中$0.$?.$!.$$.$*.$#.$@等的意义    https://blog.csdn.net/csgd2000/article/details/80396996 s ...

  3. linux下shell脚本执行jar文件

    最近在搞一个shell脚本启动jar文件个关闭jar文件的东东.搞得我都蛋疼了.今天晚上终于弄好了 话说,小弟的linux只是刚入门,经过各方查资料终于搞定了.话不多说,下面开始上小弟写的shell脚 ...

  4. 把封装脚本做成jar包

    前提: eclipse, selenium, maven 把二次封装过的脚本做成jar包, 这样可以在新建工程里也调用封装过的方法. 实现步骤: 1. project 右键 => maven = ...

  5. mavn jar包依赖冲突解决

    背景:使用maven很方便,但是引入冲突也很常见.后果很严重,各种不明实体找不到,所以需要对jar包的依赖有一个清晰的认识. 查看冲突 参考:用dependency:tree查看maven引入jar包 ...

  6. jar包版本冲突,并且要保留两个版本都能使用

    问题:在做项目时,遇到jar版本冲突的问题,并且老代码依赖不能用新jar包代替,要保证功能不变须要保证两个jar都能使用 思路:使用runtime 的exec 方式另启线程运行,然后返回结果 解决: ...

  7. spring maven项目解决依赖jar包版本冲突方案

    引入:http://blog.csdn.net/sanzhongguren/article/details/71191290 在spring reference中提到一个解决spring jar包之间 ...

  8. 解决Maven项目中jar包依赖冲突问题

    版本冲突的解决方案 [1]调节原则 [1]路径最短者优先原则 [2]路径相同时,先声明者优先原则 [2]排除原则:用于排除某项依赖的依赖jar包 <dependency> <grou ...

  9. 解决jar包依赖冲突(idea)

    在IDEA状态下查看项目依赖的关系 关系如下图 红色数据jar包冲突 在对应的依赖中出去去冲突依赖

随机推荐

  1. 最小生成树 HihoCoder-1097、1098、1109(最小生成树算法)

    太久没写最小生成树了,快忘光了.这几天回顾了一下 最小生成树一·Prim算法 AC G++ 369ms 17MB #include "cstdio" using namespace ...

  2. Holer一款局域网服务器代理到公网的内网映射工具

    Holer简介 Holer是一个将局域网服务器代理到公网的内网映射工具,支持转发基于TCP协议的报文. 相关链接 开源地址:https://github.com/Wisdom-Projects/hol ...

  3. Tozan and Gezan(x*y<a*b)

    E - Tozan and Gezan Time limit : 2sec / Memory limit : 256MB Score : 700 points Problem Statement Yo ...

  4. 爬虫入门(四):urllib2

    主要使用python自带的urllib2进行爬虫实验. 写在前面的蠢事:本来新建了一个urllib2.py便于好认识这是urllib2的实验,结果始终编译不通过,错误错误.不能用Python的关键字( ...

  5. 杀死众筹的N种方法:没想到山寨大军也参与了

    ​ ​ 众筹作为当下创业者筹集资金,将创意变为现实的最重要手段之一,正面临着越来越多的困难,甚至衍生出杀死众筹的N种方法.甚至这些方法还分为了两类,就众筹本身看,杀死它们的主要方法是:创业者卷钱跑路. ...

  6. IDEA Java 类注释、方法注释模板(可实现自动参数使用生成)

    JAVA 类文件注释设置 设置地方: 模板 /** * <p> * $description * </p> * * @author Tophua * @since ${DATE ...

  7. IP 数据报

    IP 数据报 1.IP 数据报的格式 一个 IP 数据报由首部和数据两部分组成.(数据报也可以说是数据包) 首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的. 在首部的固定部分 ...

  8. USB小白学习之路(8)FX2LP cy7c68013A——Slave FIFO 与FPGA通信(转)

    此博客转自CSDN:http://blog.csdn.net/xx116213/article/details/50535682 这个博客只对自己理解CY7C68013的配置有一定的帮助,对于配置CY ...

  9. 启动时查看配置文件application.yml

    Spring Boot Application 事件和监听器 在多环境的情况下. 可能需要切换配置文件的一个对应的属性来切换环境 面临的问题就是 如何在springboot加载完配置文件的时候就可以立 ...

  10. Javascript学习笔记-基本概念-语句

    1.if语句 if (condition) statement1 else statement2 也可以像下面这样把整个if 语句写在一行代码中: if (condition1) statement1 ...