ChatGPT学习之_shell脚本一例-查找版本冲突的第三方jar包


背景

自从换了Java后
产品里面用到了非常多的第三方组建,也就是很多jar包.

产品内的研发规范要求, jar包不能带版本号和snapshot的标识
必须使用原始的文件名, 避免有多个版本导致java类加载器出现顺序问题导致异常. 

但是第三方jar包其实没有这么过规则. 大部分都是使用带版本号的进行处理
这样有几个比较大的好处, 可以很直观的看到版本. 对开发测试工作量来说比较有益处

但是处在一个大的弊端在于, 如果产品里面包含了多个版本, 单纯通过文件名就很难进行分析和判断了. 
因为最近要换一个环境, 今天同事问到我后 感觉可以通过chatgpt的方式进行一下问题解决. 
比自己之前单纯的自己死抠代码和百度要好多了.

然后发现有了思路之后三分钟就可以讲脚本写好.

思路

大部分重复的jar包(只能这么说, 如果改了名字, 这个方法也无能为力)
一般是通过数字版本号来进行区分. 

如果将数字版本号trim掉,然后再将大小写全部改为小写, 再进行排序就可以很简单的找到可能有版本冲突的jar包了. 
刚才自己花了十分钟看到了三个jar包存在问题. 

然后尝试使用脚本进行处理 发现3分钟写好, 就可以发现四个冲版本冲突的jar包. 
思路很简单
1. 在3rd的目录下面进行操作
2. 将所有的文件名中的梳子替换为空
3. 将数字已经替换为空的名字进行大小写替换.
4. 将最终的结果进行排序和计数

第一版本的脚本为:

for i in $(for i in `ls` ; do echo $i | sed 's/[0-9]*//g'  ; done) ; do echo $i |tr '[:upper:]' '[:lower:]' ; done |sort |uniq -c |sort -k1h

发现自己多此一举了, 第二个版本的脚本为:

for i in `ls` ; do echo $i | sed 's/[0-9]*//g' |tr '[:upper:]' '[:lower:]' ; done |sort |uniq -c |sort -k1h

更容易的处理方式为:

for i in `ls` ; do echo $i | sed 's/[0-9]*//g' |tr '[:upper:]' '[:lower:]' ; done |sort |uniq -c |sort -k1h |awk '$1 >1 {print}'

结果为:

2 ehcache-...jar
      2 hutool-all-...jar
      2 okhttp-...jar
      3 netty-codec-http-...final.jar

命令查找相当简单

ChatGPT学习之_shell脚本一例-查找版本冲突的第三方jar包_jar