- Maven-release plugin creates .backup and release.properties files to your working directory which can be committed mistakenly, when they should not be. jgit-flow maven plugin doesn't create these files or any other file in your working directory.
- Maven-release plugin create two tags.
- Maven-release plugin does a build in the prepare goal and a build in the perform goal causing tests to run 2 times but jgit-flow maven plugin builds project once so tests run only once.
- If something goes wrong during the maven plugin execution, It become very tough to roll it back, on the other hand jgit-flow maven plugin makes all changes into the branch and if you want to roll back just delete that branch.
- jgit-flow maven plugin doesn't run site-deploy
- jgit-flow maven plugin provides option to turn on/off maven deployment
- jgit-flow maven plugin provides option to turn on/off remote pushes/tagging
- jgit-flow maven plugin keeps the master branch always at latest release version.
How to use Jgit-flow maven Plugin for Release
- Add the following lines in your pom.xml for source code management access
<scm> <connection>scm:git:<Git Repo URL></connection> <developerConnection>scm:git:git:<Git Repo URL></developerConnection> </scm>
- Add these line to resolve the Jgit-flow maven plugin and put the other option that will be required during the build
<build> <plugins> <plugin> <groupId>com.atlassian.maven.plugins</groupId> <artifactId>maven-jgitflow-plugin</artifactId> <version>1.0-m4.3</version> <configuration> <pushReleases>true</pushReleases> <keepBranch>false</keepBranch> <autoVersionSubmodules>true</autoVersionSubmodules> <noTag>true</noTag> <allowUntracked>true</allowUntracked> <pullDevelop>true</pullDevelop> <pullMaster>true</pullMaster> <allowSnapshots>true</allowSnapshots> <flowInitContext> <masterBranchName>master-test</masterBranchName> <developBranchName>deploy-test</developBranchName> </flowInitContext> </configuration> </plugin> </plugins> </build>
Above code snippet will perform following steps:
- Maven will resolve the jgitflow plug-in dependency
- In the configuration section, we describe how jgit-flow plug-in will behave.
- pushRelease XML tag to enable and disable jgit-flow from releasing the intermediate branches into the git or not.
- keepBranch XML tag to enable and disable the plug-in for keep the intermediate branch or not.
- noTag XMl tag to enable and disable the plug-in to create the that tag in git.
- allowUntracked XML tag to whether allow untracked file during the checking.
- flowInitContext XML tag is used to override the default and branch name of the jgit-flow plug-in
- In above code snippet, there is only two branches, master from where that code will be pulled and a intermediate branch that will be used by the jgit-flow plug-in. as I have discussed that jgit-flow plug-in uses the branches to keep it records. so development branch will be created by the plug-in that resides in the local not remotely, to track the release version etc.
<distributionManagement> <repository> <id><auth id></id> <url><repo url of repository managers></url> </repository> <snapshotRepository> <id><auth id></id> <url><repo url of repository managers></url> </snapshotRepository> </distributionManagement>
<settings> <servers> <server> <id><PUT THE ID OF THE REPOSITORY OR SNAPSHOTS ID HERE></id> <username><USERNAME></username> <password><PASSWORD></password> </server> </servers> </settings>
Start Release jgit-flow maven plugin command
Finish Release jgit-flow maven plugin command
For a example I have created a repository in github.com. for testing and two branch master-test and deploy-test. It is assumed that you have configured maven and git your system.
In the deploy-test branch run following command
$ mvn clean -Dmaven.test.skip=true install jgitflow:release-start
This command will take input from you for release version and create a release branch with release/<version>. then it will push this release branch into github repository for temporarily because we are not saving the intermediate branched
Now At the end run this command
$ mvn -Dmaven.test.skip=true jgitflow:release-finish
after finishing this command it will delete release/<version> from local and remote.
Now you can check the changes in pom file by jgitflow. in the above snapshot, it is master-test branch, you can see in the <version> tag it has removed the snapshot and also increased the version. It hold the current version of the application.
And in the deploy-test branch it show you new branch on which developers are working on