0
点赞
收藏
分享

微信扫一扫

mvn根据git变更文件编译子模块

流程图

在这里插入图片描述

shell脚本

#!/bin/bash
# vim:sw=4:ts=4:et
<<INFO
AUTHOR:anqx@yuanian.com
DATE:2022-04-30
DESCRIBE:mvn根据git变更文件编译子模块
SYSTEM:CentOS 7.6.1810
WARNING:警告信息
MODIFY:
INFO

set -e

[[ $# -ne 1 ]] && echo "ERROR:Invalid Param!!!,Please Excute:bash $0 java工程路径" && exit 1
PROJECT_DIR=$1    #java工程路径

#检查环境
Check_Env() {
    [[ ! -d ${PROJECT_DIR} ]] && echo "ERROR:${PROJECT_DIR} Not Found" && exit 1
    if ! command -v mvn &> /dev/null;then
        echo "ERROR:mvn Command Not Found" && exit 1
    fi
}


#编译子模块
Mvn_Child_Module() {
    local path=""
    cd ${PROJECT_DIR}
    if [[ -f git_pull.log ]];then
        git pull &> git_pull.log
        sed -n '/^Fast-forward/,$p' git_pull.log | egrep '^ (create|delete)' | awk '{print $4}' | uniq > tmp.txt
        sed -n '/^Fast-forward/,$p' git_pull.log | grep '^ rename' | awk -F'[ {]' '{print $3}' | uniq >> tmp.txt
        sed -n '/^Fast-forward/,$p' git_pull.log | egrep '[\+-]+$' | awk '{print $1}' | uniq >> tmp.txt
        sort -rn tmp.txt | uniq > update_file.txt       #存放变更文件路径
        rm -f tmp.txt

        if [[ -s update_file.txt ]];then
            for path in $(cat update_file.txt)
            do
                src_path=${path}    #保留最初的路径,编译成功后从update_file.txt删除
                path=$(echo ${path%/*})     #去除最后一个/
                while [ ! -f ${PROJECT_DIR}/${path}/pom.xml ]
                do
                    path=$(echo ${path%/*})     #去除最后一个/
                    if ! echo "${path}" | grep '/' &> /dev/null;then
                        break
                    fi
                done    #单行内容循环
                cd ${PROJECT_DIR}/${path}
                if [[ -f pom.xml ]];then    #有pom.xml才编译,且只编译当前模块,不递归编译父模块
                    if [[ ! -f mvn_flag ]];then
                        mvn -q clean deploy -Dmaven.test.skip=true
                        touch mvn_flag      #表示该模块已编译,防止后面重复编译
                    else
                        echo "INFO:${path} Already mvn"
                    fi
                    sed -i "1d" ${PROJECT_DIR}/update_file.txt
                else
                    echo "WARN:${path}/pom.xml Not Exist"
                fi
            done    #update_file.txt循环
            find ${PROJECT_DIR}/ -name 'mvn_flag' -type f | xargs rm -f
            echo "INFO:mvn ${PROJECT_DIR} Success"
        else
            echo "INFO:${PROJECT_DIR} Not Update File"
        fi
    else
        mvn -q clean deploy -Dmaven.test.skip=true
        touch git_pull.log
        echo "INFO:mvn ${PROJECT_DIR} Success"
    fi
}

Check_Env
Mvn_Child_Module
举报

相关推荐

0 条评论