`
lydawen
  • 浏览: 465129 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics