在开始这篇文章之前,我需要指出我在去年才开始认真地与Git合作 。 不幸的是,我从事的许多项目仍在使用SVN或CVS,但现在我终于开始使用Git了 。
在过去的几年中,我使用Maven Release Plugin完成了许多软件发行。 我仍然记得我花了整整一个星期的时间才在我的一个项目中设置插件。 在大多数情况下,它都运行良好,但是如果出现问题,您可以花几个小时来解决问题。 天哪,噩梦!
最近,我想对Git项目执行相同的操作,并且遇到了Maven JGit-Flow插件 ,我必须告诉你,这太棒了! 设置非常容易,并且在第一次尝试时就可以完美地工作!
该插件基于Vincent Driessen在A成功的Git分支模型一 文中描述的开发模型。 花点时间阅读它,因为它非常有趣。
我将向您展示如何使用此插件执行发布。 我将使用有关Spring Batch的最新文章中的项目作为Wildfly Module 。
设定
设置非常简单,只需将以下内容添加到pom.xml
:
om-jgitflow-maven-plugin.xml
<plugin><groupId>external.atlassian.jgitflow</groupId><artifactId>jgitflow-maven-plugin</artifactId><version>1.0-m3</version><configuration><noDeploy>true</noDeploy></configuration>
</plugin>
我刚刚添加了noDeploy
配置,因为我没有发布到Maven存储库。 而已!
释放
让我们看看我的项目分支和版本:
分行
radcortez:wildfly-spring-batch radcortez$ git branch -avv
* master 0b2364b [origin/master] Added documentation.remotes/origin/master 0b2364b Added documentation.
radcortez:wildfly-spring-batch radcortez$ mvn help:evaluate -Dexpression=project.version
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building wildfly-spring-batch 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-help-plugin:2.2:evaluate (default-cli) @ wildfly-spring-batch ---
[INFO] No artifact parameter specified, using 'com.cortez.wildfly.batch:wildfly-spring-batch:war:1.0-SNAPSHOT' as project.
[INFO]
1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
现在,只需运行mvn jgitflow:release-start
:
发布准备
radcortez:wildfly-spring-batch radcortez$ mvn jgitflow:release-start
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building wildfly-spring-batch 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- jgitflow-maven-plugin:1.0-m3:release-start (default-cli) @ wildfly-spring-batch ---
[INFO] ensuring origin exists...
[INFO] (develop) Checking for SNAPSHOT version in projects...
[INFO] (develop) Checking dependencies and plugins for snapshots ...
What is the release version for "wildfly-spring-batch"? (com.cortez.wildfly.batch:wildfly-spring-batch) [1.0]:
[INFO] ensuring origin exists...
[INFO] (release/1.0) adding snapshot to pom versions...
[INFO] (release/1.0) updating poms for all projects...
[INFO] turn on debug logging with -X to see exact changes
[INFO] (release/1.0) updating pom for wildfly-spring-batch...
What is the development version for "wildfly-spring-batch"? (com.cortez.wildfly.batch:wildfly-spring-batch) [1.1-SNAPSHOT]:
[INFO] (develop) updating poms with next development version...
[INFO] (develop) updating poms for all projects...
[INFO] turn on debug logging with -X to see exact changes
[INFO] (develop) updating pom for wildfly-spring-batch...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
您将获得一个交互式菜单,以选择要发布的版本号,方法与Maven Release Plugin相同。 我开发的master
分支,但在这个过程中release
分支与发行版本和创建development
分支与新开发版本。
发行准备分支
radcortez:wildfly-spring-batch radcortez$ git branch -avvdevelop 728856a [origin/develop] updating poms for 1.1-SNAPSHOT developmentmaster 0b2364b [origin/master] Added documentation.
* release/1.0 9f88a42 updating poms for branch '1.0' with snapshot versionsremotes/origin/master 0b2364b Added documentation.
现在,这很酷的事情是,一切仍在您的本地环境中! 如果您对更改不满意,则可以摆脱分支并重新开始。 此时未执行构建。
如果要发布,只需运行mvn jgitflow:release-finish
:
释放完成
radcortez:wildfly-spring-batch radcortez$ mvn jgitflow:release-finish
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building wildfly-spring-batch 1.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- jgitflow-maven-plugin:1.0-m3:release-finish (default-cli) @ wildfly-spring-batch ---
[INFO] ensuring origin exists...
[INFO] running jgitflow release finish...
[INFO] ensuring origin exists...
[INFO] (release/1.0) Updating poms for RELEASE
[INFO] (release/1.0) removing snapshot from pom versions...
[INFO] (release/1.0) updating poms for all projects...
[INFO] turn on debug logging with -X to see exact changes
[INFO] (release/1.0) updating pom for wildfly-spring-batch...
[INFO] (release/1.0) Checking for RELEASE version in projects...
[INFO] (release/1.0) Checking dependencies and plugins for snapshots ...[INFO] Scanning for projects...[INFO][INFO] ------------------------------------------------------------------------[INFO] Building wildfly-spring-batch 1.0
在此步骤中,将按照A成功的Git分支模型中所述合并release
分支并创建标签。 记住,什么都没有推送,所以您可以随时还原该过程。
现在让我们看看分支和标签:
分支标签
radcortez:wildfly-spring-batch radcortez$ git branch -avv
* develop a8e762b [origin/develop] Updating develop poms back to pre merge statemaster b6fbda0 [origin/master: ahead 3] Merge branch 'release/1.0'remotes/origin/master 0b2364b Added documentation.
radcortez:wildfly-spring-batch radcortez$ git tag
1.0
现在,您可以轻松完成发行,并准备继续在新的更新development
分支中进行development
。 那有多容易?
结论
研究原始发行插件和jgitflow之间的一些区别:
- 您不必担心阶段提交。 一切都是本地的,直到您推送。
- 在此过程中,其他人更改pom.xml不再有问题。
- 您的项目仅构建一次,从而节省了发布时间。
- 设置非常简单。 一切都从您的Git配置中选取。
当我调查/撰写文章时,我发现了这篇非常有趣的文章,关于执行发布的另一种方法。 值得阅读: Axel Fontaine的 http://axelfontaine.com/blog/final-nail.html 。
翻译自: https://www.javacodegeeks.com/2014/08/maven-git-release.html