Частичная чистая установка с Maven после Git Merge / Pull

2

С помощью терминала можно ли очистить и установить проекты в рамках проекта POM, в которых произошли изменения после git merge/pull, другими словами, изменения после последней чистой установки?

РЕДАКТИРОВАТЬ

Благодаря ответу VonC я выполнил сценарий, который делает то, что я хотел. Смотрите мой ответ ниже для деталей.

Теги:
maven

2 ответа

1
Лучший ответ

Поскольку вы можете обнаружить список изменений pom.xml между двумя pom.xml:

git diff --name-status <commit1> <commit2>

(см. также " Изменение детализации после Git pull ")

Вы можете создать скрипт, который бы для каждого модуля выполнял mvn clean install.

  • 0
    Благодаря вашему ответу я смог сделать сценарий, который может достичь того, что я хотел. Спасибо! Я добавлю сценарий к моему вопросу.
1

Благодаря ответу VonC я выполнил сценарий, который делает то, что я хотел.

Проект представляет собой проект POM, который содержит проекты суб-POM, в которых размещены основные проекты для приложения. Я достиг желаемого результата, заставив текущую рабочую ветку вызывать git diff --name-status HEAD@{1} <current_branch>.

Получился список измененных файлов в проекте, который я затем разделил на массив. К сожалению, я не смог заставить разделение работать хорошо, поэтому массив организован как тип изменения, за которым следует путь к файлу.

Затем я проверил размер строки, пропуская строки из одного символа. Следующим шагом было разделение строки на массив, разделенный символом /. Проверяется, существует ли он в массиве, если корневые пути, добавляется, если его нет.

Наконец, переберите массив корневых путей и выполните вызовы maven.

################################################################################
#
# License:.....GNU General Public License v3.0
# Author:......CodeMonkey
# Date:........14 November 2018
# Title:.......GitMavenCleanInstall.sh
# Description: This script is designed to cd to a set Maven POM Project,
#   perform a git remote update and pull, and clean install the changed
#   files projects.
# Notice:......The project structure this script was originally set to target
#   is structured as a Maven POM Project that contains several sub-POM Projects.
#   The sub-POM Projects contain Maven Java Application projects. The targets
#   should be easy to change, and allow for others to target other structures.
#
################################################################################
#
# Change History: N/A
#
################################################################################

#!/bin/bash
#Function to check if array has element
containsElement () {
    local e match="$1"
    shift
    for e; do [[ "$e" == "$match" ]] && return 0; done
    return 1
}

#Navigate to the POM Project
cd PATH/TO/POM/PROJECT
#Remote update
git remote update -p
#Pull
git pull

#Get the current working branch
CURRENT_BRANCH="$(git branch | sed -n -e 's/^\* \(.*\)/\1/p')"
#Get the output of the command git diff
GIT_DIFF_OUTPUT="$(git diff --name-status HEAD@{1} ${CURRENT_BRANCH})"

#Split the diff output into an array
read =a GIT_DIFF_OUTPUT_ARY <<< $GIT_DIF_OUTPUT
#Declare empty array for root path
declare -a GIT_DIFF_OUTPUT_ARY_ROOT_PATH=()
FORWARD='/'
#Loop diff output array
for i in "$GIT_DIFF_OUTPUT_ARY[@]}"
do
    #Check that the string is not 1 Character
    if [[ "$(echo -n $1 | wc -m)" != 1 ]]
    then
        #Split the file path by /
        IFS='/' read -ra SPLIT <<< $i
        #Concatenate first path + / + second path
        path=${SPLIT[0]}$FORWARD${SPLIT[1]}
        #Call function to see if it already exists in the root path array
        containsElement "$path" "${GIT_DIFF_OUTPUT_ARY_ROOT_PATH[@]}"
        if [[ $? != 0 ]]
        then
            #Add the path since it was not found
            GIT_DIFF_OUTPUT_ARY_ROOT_PATH+=($path)
        fi
    fi
done

#Loop root path array
for val in ${GIT_DIFF_OUTPUT_ARY_ROOT_PATH[@]}
do
    #CD into root path
    cd $val
    #Maven call to clean install
    mvn -DskipTests=true --errors -T 8 -e clean install
    #CD back up before next project
    cd ../../
done
  • 0
    Молодцы и +1

Ещё вопросы

Сообщество Overcoder
Наверх
Меню