1. 程式人生 > >shell中獲取某個目錄下全部的子檔名,java根據包名分批打包

shell中獲取某個目錄下全部的子檔名,java根據包名分批打包

需求

公司每次升級正式環境都是對著專案各個模組進行單獨打包。
現在公司希望使用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##*/}