dong5300 发表于 2017-5-16 06:55:39

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
页: [1]
查看完整版本: shell 解析 class package并复制到指定包路径