shell 解析 class package并复制到指定包路径

说明:讨论研发,QA流程是否规范的 goto end

场景:java开发,公司QA在测试应用时,有时为点小问题加快速度测试(研发环境不方便测试),研发并不会重新tag送测而是直接给几个class给QA先验证下

麻烦一:QA需要手工备份原来的class并将新class替换原来的class。

麻烦二:研发需要将包路径告知QA,QA需要手工一个一个放,遇到class 较多时容易出错。

麻烦三:。。。。

 

工具实现的功能及方法:

1、javap反编译,结合grep/sed 获取到包路径。

2、完成class的备份及复制。

 

脚本如:

 

echo "###############################class 解析复制工具#####################################"
echo "##解析当前目前下所有.class文件,并复制到对应包路径;如文件存在则先备份再复制          #"
echo "##使用方法: #pp.sh <path>  path:class根目录,即类都将复制到以这个为根目录的对应包下。#"
echo "##################################hzdev###############################################"
binPath=$1
if [ ! -n "$binPath" ]; then
        echo 未指定class根目录,程序退出
        exit 0
        #binPath=pwd|sed 's/ //g'
fi
echo ============class根目录:$binPath

timeStamp=`date '+%s'`
 

for f in *.class
do
################ # echo ========Current class:$f
  className=$(echo  "$f"|sed -e's/\.class//g')
  className_=$(echo $className| sed 's/\$.*//g')
  package=$(javap $className|grep -oP '(?<=class ).*(?=\.'$className_'.* extends)'|sed  -e's/\./\//g')
  #echo "className:"$className
  #echo "package:"$package
 
  classFile="$binPath"/"$package"/"$f"
  classPath="$binPath"/"$package"

#  echo $classFile  
#check path exists
  if [ ! -d "$classPath" ];then
        echo =====目录$classPath不存在,创建目录
        mkdir $classPath -p
  fi

#check class file exists  
  if [ ! -f "$classFile" ]; then
        echo "复制文件$f------------>$classFile"
        cp $f $classFile
  else
        bakFile="$classFile"."$timeStamp"
        echo "=======>class文件存在,备份为 $bakFile"
        echo "复制文件$f------------>$classFile"
        mv $classFile $classFile.$timeStamp
        cp $f $classFile
  fi  

echo "******************************************************************************************"

done

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值