Jar包问题查找脚本

#!/bin/bash

查找路径下jar包包含的字段

if [ $# -lt 2 ];then

echo ‘Usage : jargrep text path’

exit 1;

fi

LOOK_FOR=$1

LOOK_FOR=echo ${LOOK_FOR//\./\/}

folder=$2

echo "find ‘$LOOK_FOR’ in $folder "

for i in find $2 -name "*jar"

do

unzip -p i ∣ g r e p " i | grep " igrep"LOOK_FOR" > /dev/null

if [ $? = 0 ]

then

echo “==> Found “$LOOK_FOR” in $i”

fi

done

命令格式

grep-jar 关键字或者类名 路径

例如

./grep-jar TaskQue ./lib

命令效果

三、检查jar包冲突脚本

脚本功能

此脚本用于识别冲突的Jar包,可以在一个根目录下找到所有包含相同类的Jar包,并且根据相同类的多少来判断Jar包的相似度。

解决问题

常常用于某些功能上线不可用或者没有按照预期起到作用,使用此脚本分析是否存在两个版本的类,而老版本的类被Java虚拟机加载,其实,JVM规范并没有规定类路径下相同类的加载顺序,实现JVM规范的虚拟机的实现机制也各不相同,因此无法判断相同的类中哪个版本的类会被先加载,因此Jar包冲突是个非常讨厌的问题。

脚本代码

#!/bin/bash

脚本用于识别冲突的Jar包,可以在一个根目录下找到所有包含相同类的Jar包

if [ $# -eq 0 ];then

echo “please enter classpath dir”

exit -1

fi

if [ ! -d “$1” ]; then

echo “not a directory”

exit -2

fi

tmpfile=“/tmp/.cp$(date +%s)”

tmphash=“/tmp/.hash$(date +%s)”

verbose=“/tmp/cp-verbose.log”

declare -a files=(find "$1" -name "*.jar")

for ((i=0; i < ${#files[@]}; i++)); do

jarName=basename ${files[$i]}

list=unzip -l ${files[$i]} | awk -v fn=$jarName '/\.class$/{print $NF,fn}'

size=echo "$list" | wc -l

echo $jarName $size >> $tmphash

echo “$list”

done | sort | awk 'NF{

a[$1]++;m[$1]=m[$1]“,”$2}END{for(i in a) if(a[i] > 1) print i,substr(m[i],2)

}’ > $tmpfile

awk ‘{print $2}’ $tmpfile |

awk -F’,’ ‘{i=1;for(;i<=NF;i++) for(j=i+1;j<=NF;j++) print i , i, i,j}’ |

sort | uniq -c | sort -nrk1 | while read line; do

dup=${line%% *}

jars=${line#* }

jar1=${jars% *}

jar2=${jars#* }

len_jar1=grep -F "$jar1" $tmphash | grep ^"$jar1" | awk '{print $2}'

len_jar2=grep -F "$jar2" $tmphash | grep ^"$jar2" | awk '{print $2}'

Modified by Robert 2017.4.9

#len= ( ( (( ((len_jar1 > $len_jar2 ? $len_jar1 : $len_jar2))

len_jar1=echo $len_jar1 | awk -F' ' '{print $1}'

len_jar2=echo $len_jar2 | awk -F' ' '{print $1}'

if [ $len_jar1 -gt $len_jar2 ]

then
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

完结

Redis基于内存,常用作于缓存的一种技术,并且Redis存储的方式是以key-value的形式。Redis是如今互联网技术架构中,使用最广泛的缓存,在工作中常常会使用到。Redis也是中高级后端工程师技术面试中,面试官最喜欢问的问题之一,因此作为Java开发者,Redis是我们必须要掌握的。

Redis 是 NoSQL 数据库领域的佼佼者,如果你需要了解 Redis 是如何实现高并发、海量数据存储的,那么这份腾讯专家手敲《Redis源码日志笔记》将会是你的最佳选择。

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
佼佼者,如果你需要了解 Redis 是如何实现高并发、海量数据存储的,那么这份腾讯专家手敲《Redis源码日志笔记》将会是你的最佳选择。

[外链图片转存中…(img-J65keUwv-1711980543222)]

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值