IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> mvn根据git变更文件编译子模块 -> 正文阅读

[系统运维]mvn根据git变更文件编译子模块

背景

java依赖包工程每次打包都需要半小时左右,但每次开发只修改里面的几个小模块,需要实现只编译变更模块的功能,来提升编译的效率。

设计思路

根据git pull的输出来获取变更文件的绝对路径,循环遍历找到有pom.xml的目录,并执行mvn deploy

流程图

在这里插入图片描述

shell脚本

#!/bin/bash
# vim:sw=4:ts=4:et
<<INFO
AUTHOR:运维@小兵
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
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-05-03 09:29:08  更:2022-05-03 09:29:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 18:00:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码