项目中的jar包里面可能有 包名+类名 都相同的class,可能导致class加载出问题。
昨天有同事写了个脚本来实现查找重复jar包操作的功能,结果跑一次要20分钟。
汗!
问我为啥这么慢!一看,发现时间都耗在io操作上了(他把jar包解压缩后再做的其他操作)。
其实要看jar包里面的内容无需解压,unzip -l即可
写了个脚本,自己在eclipse插件的那个文件夹里面试了一下,还好。
总共697个jar文件,里面包含了85836个class文件,解析一次只需要10秒左右。
awk的数组效率还是挺高的。shell代码如下:
[color=darkred]
(7月18号修改)同事要求记录jar包的文件名,回来想了一下,没有很好的办法,用2个数组解决了。
暂时没有想到更好的办法。[/color]
昨天有同事写了个脚本来实现查找重复jar包操作的功能,结果跑一次要20分钟。
汗!
问我为啥这么慢!一看,发现时间都耗在io操作上了(他把jar包解压缩后再做的其他操作)。
其实要看jar包里面的内容无需解压,unzip -l即可
写了个脚本,自己在eclipse插件的那个文件夹里面试了一下,还好。
总共697个jar文件,里面包含了85836个class文件,解析一次只需要10秒左右。
awk的数组效率还是挺高的。shell代码如下:
ls *jar|while read LINE; do unzip -l $LINE; done|awk '/.*\.class$/{a[$4]++}END{for(aa in a){if(a[aa]>1)print a[aa]" "aa}}'|sort -nrk1,1
[color=darkred]
(7月18号修改)同事要求记录jar包的文件名,回来想了一下,没有很好的办法,用2个数组解决了。
暂时没有想到更好的办法。[/color]
ls *jar|while read LINE; do unzip -l $LINE; done|awk '/.*\.class$|^Archive/{if($1=="Archive:"){f=$2};if($4!=""){c[$4]++;a[$4]=a[$4]" "f}}END{for(aa in a){if(c[aa]>1)print c[aa]" "aa" "a[aa]}}'|sort -nrk1,1