Partial Clean Install with Maven after Git Merge/Pull










2















Using the terminal, is it possible to clean and install the projects within a POM Project that have changes after a git merge/pull, in other words, changes since the last clean install?



EDIT



Thanks to VonC's answer, I have completed a script that does what I desired. See my answer bellow for details.










share|improve this question




























    2















    Using the terminal, is it possible to clean and install the projects within a POM Project that have changes after a git merge/pull, in other words, changes since the last clean install?



    EDIT



    Thanks to VonC's answer, I have completed a script that does what I desired. See my answer bellow for details.










    share|improve this question


























      2












      2








      2


      1






      Using the terminal, is it possible to clean and install the projects within a POM Project that have changes after a git merge/pull, in other words, changes since the last clean install?



      EDIT



      Thanks to VonC's answer, I have completed a script that does what I desired. See my answer bellow for details.










      share|improve this question
















      Using the terminal, is it possible to clean and install the projects within a POM Project that have changes after a git merge/pull, in other words, changes since the last clean install?



      EDIT



      Thanks to VonC's answer, I have completed a script that does what I desired. See my answer bellow for details.







      java git maven






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 14 '18 at 22:06







      CrazyJane

















      asked Nov 13 '18 at 23:38









      CrazyJaneCrazyJane

      357




      357






















          2 Answers
          2






          active

          oldest

          votes


















          1














          Since you can detect the list of pom.xml changes between two commits:



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


          (see also "Detail change after Git pull")



          , you can make a script which would, for each module, do a mvn clean install.






          share|improve this answer























          • Thanks to your answer, I was able to make a script that can achieve what I wanted. Thank you! I will add the script to my question.

            – CrazyJane
            Nov 14 '18 at 21:44


















          1














          Thanks to VonC's answer, I have completed a script that does what I desired.



          The project is a POM Project that contains sub-POM Projects that house the main projects for the application. I achieved the desired result by getting the current working branch to call git diff --name-status HEAD@1 <current_branch>.



          This got the list of the changed files within the project, which I then split into an array. Unfortunately I could not get the split to work well, so the array is organized as change type followed by file path.



          Then I checked string size, skipping single character strings. The next step was to split the string into an array, delimited by /. Checked if it exists in an array if root paths, adding if it does not.



          Lastly, loop over the root path array and do the maven calls.



          ################################################################################
          #
          # 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





          share|improve this answer

























          • Well done, and +1

            – VonC
            Nov 14 '18 at 22:47










          Your Answer






          StackExchange.ifUsing("editor", function ()
          StackExchange.using("externalEditor", function ()
          StackExchange.using("snippets", function ()
          StackExchange.snippets.init();
          );
          );
          , "code-snippets");

          StackExchange.ready(function()
          var channelOptions =
          tags: "".split(" "),
          id: "1"
          ;
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function()
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled)
          StackExchange.using("snippets", function()
          createEditor();
          );

          else
          createEditor();

          );

          function createEditor()
          StackExchange.prepareEditor(
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader:
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          ,
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          );



          );













          draft saved

          draft discarded


















          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53291073%2fpartial-clean-install-with-maven-after-git-merge-pull%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown

























          2 Answers
          2






          active

          oldest

          votes








          2 Answers
          2






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          1














          Since you can detect the list of pom.xml changes between two commits:



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


          (see also "Detail change after Git pull")



          , you can make a script which would, for each module, do a mvn clean install.






          share|improve this answer























          • Thanks to your answer, I was able to make a script that can achieve what I wanted. Thank you! I will add the script to my question.

            – CrazyJane
            Nov 14 '18 at 21:44















          1














          Since you can detect the list of pom.xml changes between two commits:



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


          (see also "Detail change after Git pull")



          , you can make a script which would, for each module, do a mvn clean install.






          share|improve this answer























          • Thanks to your answer, I was able to make a script that can achieve what I wanted. Thank you! I will add the script to my question.

            – CrazyJane
            Nov 14 '18 at 21:44













          1












          1








          1







          Since you can detect the list of pom.xml changes between two commits:



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


          (see also "Detail change after Git pull")



          , you can make a script which would, for each module, do a mvn clean install.






          share|improve this answer













          Since you can detect the list of pom.xml changes between two commits:



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


          (see also "Detail change after Git pull")



          , you can make a script which would, for each module, do a mvn clean install.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 14 '18 at 6:04









          VonCVonC

          843k29426733227




          843k29426733227












          • Thanks to your answer, I was able to make a script that can achieve what I wanted. Thank you! I will add the script to my question.

            – CrazyJane
            Nov 14 '18 at 21:44

















          • Thanks to your answer, I was able to make a script that can achieve what I wanted. Thank you! I will add the script to my question.

            – CrazyJane
            Nov 14 '18 at 21:44
















          Thanks to your answer, I was able to make a script that can achieve what I wanted. Thank you! I will add the script to my question.

          – CrazyJane
          Nov 14 '18 at 21:44





          Thanks to your answer, I was able to make a script that can achieve what I wanted. Thank you! I will add the script to my question.

          – CrazyJane
          Nov 14 '18 at 21:44













          1














          Thanks to VonC's answer, I have completed a script that does what I desired.



          The project is a POM Project that contains sub-POM Projects that house the main projects for the application. I achieved the desired result by getting the current working branch to call git diff --name-status HEAD@1 <current_branch>.



          This got the list of the changed files within the project, which I then split into an array. Unfortunately I could not get the split to work well, so the array is organized as change type followed by file path.



          Then I checked string size, skipping single character strings. The next step was to split the string into an array, delimited by /. Checked if it exists in an array if root paths, adding if it does not.



          Lastly, loop over the root path array and do the maven calls.



          ################################################################################
          #
          # 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





          share|improve this answer

























          • Well done, and +1

            – VonC
            Nov 14 '18 at 22:47















          1














          Thanks to VonC's answer, I have completed a script that does what I desired.



          The project is a POM Project that contains sub-POM Projects that house the main projects for the application. I achieved the desired result by getting the current working branch to call git diff --name-status HEAD@1 <current_branch>.



          This got the list of the changed files within the project, which I then split into an array. Unfortunately I could not get the split to work well, so the array is organized as change type followed by file path.



          Then I checked string size, skipping single character strings. The next step was to split the string into an array, delimited by /. Checked if it exists in an array if root paths, adding if it does not.



          Lastly, loop over the root path array and do the maven calls.



          ################################################################################
          #
          # 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





          share|improve this answer

























          • Well done, and +1

            – VonC
            Nov 14 '18 at 22:47













          1












          1








          1







          Thanks to VonC's answer, I have completed a script that does what I desired.



          The project is a POM Project that contains sub-POM Projects that house the main projects for the application. I achieved the desired result by getting the current working branch to call git diff --name-status HEAD@1 <current_branch>.



          This got the list of the changed files within the project, which I then split into an array. Unfortunately I could not get the split to work well, so the array is organized as change type followed by file path.



          Then I checked string size, skipping single character strings. The next step was to split the string into an array, delimited by /. Checked if it exists in an array if root paths, adding if it does not.



          Lastly, loop over the root path array and do the maven calls.



          ################################################################################
          #
          # 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





          share|improve this answer















          Thanks to VonC's answer, I have completed a script that does what I desired.



          The project is a POM Project that contains sub-POM Projects that house the main projects for the application. I achieved the desired result by getting the current working branch to call git diff --name-status HEAD@1 <current_branch>.



          This got the list of the changed files within the project, which I then split into an array. Unfortunately I could not get the split to work well, so the array is organized as change type followed by file path.



          Then I checked string size, skipping single character strings. The next step was to split the string into an array, delimited by /. Checked if it exists in an array if root paths, adding if it does not.



          Lastly, loop over the root path array and do the maven calls.



          ################################################################################
          #
          # 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






          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Nov 14 '18 at 22:44

























          answered Nov 14 '18 at 22:07









          CrazyJaneCrazyJane

          357




          357












          • Well done, and +1

            – VonC
            Nov 14 '18 at 22:47

















          • Well done, and +1

            – VonC
            Nov 14 '18 at 22:47
















          Well done, and +1

          – VonC
          Nov 14 '18 at 22:47





          Well done, and +1

          – VonC
          Nov 14 '18 at 22:47

















          draft saved

          draft discarded
















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid


          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.

          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53291073%2fpartial-clean-install-with-maven-after-git-merge-pull%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Kleinkühnau

          Makov (Slowakei)

          Deutsches Schauspielhaus