#!/bin/sh
#参数1 是自定义的环境类型 dev test prod
#应用所在根目录路径 xxx替换为自己应用文件夹名
appHome=/data/apps/webapps/xxx-$1
#应用实际路径xxx替换为自己的应用名
appJar=$appHome/xxx.jar
isLegal="false"
#校验输入的环境参数是否合法
for loop in "dev" "test" "prod"
do
if [[ $1 =~ $loop ]];
then
isLegal="true"
echo "you are choosing $loop environment"
fi
done
if [[ $isLegal = "false" ]];
then
echo "param is wrong! avaliable are dev,test,prod"
exit
fi
#filesTobeUpdated 指的是要替换的文件上传路径
filesTobeUpdated=/home/$1/classes
#临时目录
tempDir=$filesTobeUpdated/temp
#这里做一些校验,主要是判断上传的文件夹是否存在,以及文件下是否有文件
if [ -d $filesTobeUpdated ]
then
file=`find $filesTobeUpdated -type f`
if [[ $file = "" ]];
then
echo "no files avaliable in $filesTobeUpdated ,please check again!"
exit
else
echo "start replace classes in $appJar"
fi
else
echo "dir $filesTobeUpdated is not avaliable,please check!"
exit
fi
#先备份下原先的应用xxx.jar改成自己的应用名
echo "backup the app"
cp $appJar $appHome/xxx.jar.bak
#创建下临时文件夹
echo "create the tempDir"
if [ ! -d $tempDir ];
then
mkdir $tempDir
fi
#开始从jar中替换文件
ifRepalcedFile="false"
for filename in $(ls $filesTobeUpdated)
do
if [ -f "$filesTobeUpdated/$filename" ];
then
echo -e "正在jar包寻找$filename 所在路径"
tempClassFilePath=`jar -tf $appJar |grep -w "$filename"`
if [ -z "$tempClassFilePath" ];
then
echo -e "在jar包中未找到该文件: $filename\n"
continue
else
echo -e "找到文件:$filename,所在jar包路径为: $tempClassFilePath\n"
echo -e "开始从jar包中解压该文件到$tempDir 路径下.........."
cd $tempDir
jar -xvf $appJar $tempClassFilePath
echo -e "解压完毕\n"
echo -e "开始替换解压后的文件......."
cp $filesTobeUpdated/$filename "$tempDir/$tempClassFilePath"
echo -e "替换完成\n"
echo -e "开始替换jar中的class文件"
jar -uvf $appJar $tempClassFilePath
echo -e "替换完成\n\n\n\n\n\n\n"
ifRepalcedFile="true"
fi
fi
done
if [ $ifRepalcedFile = "false" ];
then
echo -e "\n\n\n\n\n 未在jar包中找到class文件,替换失败!"
exit
else
echo "替换成功,开始删除上传的class文件"
if [ -d $filesTobeUpdated ]
then
cd $filesTobeUpdated
rm -rf *
fi
echo -e "\n\n\n\n\n 开始重启应用 "
cd $appHome
sh run-$1.sh
fi
shell脚本实现在linux上批量替换jar包中的class文件并自动重启应用
最新推荐文章于 2024-04-10 10:32:48 发布