shell中獲取某個目錄下全部的子檔名,java根據包名分批打包
阿新 • • 發佈:2019-02-18
需求
公司每次升級正式環境都是對著專案各個模組進行單獨打包。
現在公司希望使用shell指令碼來批量的自動打包,以減少人工出錯的情況。
思路
①我會先對整個專案進行javac
編譯,把編譯後的.class
檔案放到classes
資料夾中。
②再cd
進入到v1
資料夾中,獲得資料夾v1下所有的資料夾名。
因為到時打jar包時,需要模糊匹配相關路徑下的.class檔案。
並且打jar包格式:ggservice-資料夾名.jar
的形式。
for
迴圈得到的資料夾名,進行打jar
包。
得到某目錄下中全部資料夾名的方法
方法一
#!/bin/bash
dir=$(ls -l D:/temp/ |awk '/^d/ {print $NF }')
for i in $dir
do
echo $i
done
方法二
for dir in $(ls D:/tmep/)
do
[ -d $dir ] && echo $dir
done
方法三
ls -l D:/temp/ |awk '/^d/ {print $NF}'
其實同方法一,直接就可以顯示不用for迴圈
剩下的就簡單啦!直接上全部程式碼:
下面的程式碼是寫在jenkins
中的Execute shell
中的指令碼:
#!/bin/bash
export PATH=~/play-1.2.7:$PATH
#獲得當前目錄
cur=$( pwd)
echo "pwd:"${cur}
fileName=${WORKSPACE##*/}
echo "當前工作空間目錄名稱:"${fileName}
rm -rf ggservice-dataservice.jar
output_path=${cur}/classes
package=${cur}/package
echo $output_path
if [ ! -d $output_path ]; then
mkdir $output_path
fi
if [ ! -d $package ]; then
mkdir $package
fi
## 獲取依賴庫和需要編譯的java檔案
export libs=`find ./dataservice/lib -name "*.jar" |xargs|sed "s/ /:/g"`
export javafiles=`find ./dataservice/ -name "*.java" |xargs|sed "s/ / /g"`
export javautils=`find ./utils/app/ -name "*.java" |xargs|sed "s/ / /g"`
export play_lib=/opt/play-1.2.7/framework/play-1.2.7.jar
export play_lib_common=`find /opt/play-1.2.7/framework/lib/ -name "*.jar" |xargs|sed "s/ /:/g"`
#echo ${javafiles}
#echo "公共---------"
#echo ${javautils}
# 清除
rm -rf package/*
# 清除編譯後的class檔案
rm -rf ${output_path}/*
# 編譯
tc=`javac -d ${cur}/classes -cp ${libs}:$play_lib:$play_lib_common -encoding utf-8 ${javafiles} ${javautils} 2>&1`
if [[ "x" != "x$tc" ]] && [[ "$tc" =~ "錯誤" || "$tc" =~ "error" ]]
then
echo "javac 編譯出錯"
echo "$tc"
exit 1
else
echo "javac 編譯成功"
echo "$tc"
fi
# 分批打包
#cd /home/jenkins/workspace/ggservice/dataservice/app/ggservice/v1/
cd /home/jenkins/workspace/ggservice-pre-jar/dataservice/app/ggservice/v1
dir=$(ls -l |awk '/^d/ {print $NF}')
cd $output_path
for i in $dir
do
echo "ggservice-"${i}".jar打包情況":
jar -cvf ${package}/ggservice-${i}.jar */v1/$i/*
done
# 對公共基礎包進行打包
export baseclass=`find ./ -path '*/ggservice/common/*.class' -o -path '*/ggservice/constant/*.class'`
echo "ggservice-base.jar 打包情況":
jar -cvf ${package}/ggservice-base.jar ${baseclass}
# 對Model包進行打包
export modelclass=`find ./ -path '*/ggservice/model/*.class'`
echo "ggservice-model.jar 打包情況":
jar -cvf ${package}/ggservice-model.jar ${modelclass}
# utils 包進行打包
export utilsclass=`find ./ -path '*/ggframework/utils/common/*.class'`
echo "ggframework-utils_2.10.jar 打包情況":
jar -cvf ${package}/ggframework-utils_2.10.jar ${utilsclass}
# 把專案依賴的jar統一放到一個資料夾中,節省空間
cd ${WORKSPACE%/*}
#mv -f `find . -path "*/lib/*" -name "*.jar"` ../lib/
#echo ${WORKSPACE}
./mvlib.sh ${WORKSPACE##*/}