抽象
Maven版本插件是一个非常强大的工具,我在很大程度上依赖于它来协调软件版本。 通常,软件发行版本号遵循简单的1.0.0.0-SNAPSHOT
格式。 但是最近我需要在版本号中添加限定符-类似于1.0-beta-SNAPSHOT
或1.0.0-fix-bug-description-SNAPSHOT
。 在我第一次尝试添加限定符后,Maven发行插件以意外的方式自动增加了版本号。 因此,我需要研究Maven版本插件版本的自动递增行为,但要在生产Git存储库中做很多废话(我没有开发库)。 本博客的目的是展示如何配置Maven发行插件,使其可以在本地运行,而不更改生产源代码控制。
免责声明
这篇文章仅供参考。 在使用所提供的任何信息之前,请认真思考。 从中学到东西,但最终自己做出决定,风险自负。
要求
我使用以下主要技术完成了本文的所有工作。 您可能可以使用不同的技术或版本来做相同的事情,但不能保证。
- NetBeans 11.2
- Maven 3.3.9(与NetBeans捆绑在一起)
- Maven发布插件2.5.1
- Java 11(zulu11.35.15-ca-jdk11.0.5-win_x64)
- 适用于Windows 2.25.0的Git
注意 Maven版本插件假定可执行文件(如git)在PATH
。 如果遇到找不到git
命令的错误,则需要确保Git的安装独立于IDE且位于PATH
。
下载
访问我的GitHub页面https://github.com/mjremijan以查看我所有的开源项目。 这篇文章的代码位于: https : //github.com/mjremijan/thoth-maven-release-plugin
安装Git
您需要做的第一件事是安装Git。 即使Git已集成到您的IDE中(与NetBeans一样),Maven发行版插件仍假定其所需的可执行文件在PATH上可用。 为您的环境下载,安装和配置PATH。
POM <scm>标签
您需要做的第二件事是配置POM <scm>标记。 当Maven版本插件运行时,它将使用<scm>标记值来标识源控制系统的位置。
相关配置如下,请参阅GitHub上的完整pom.xml 。
因为我想在本地运行并且不连接到生产源代码控制系统,所以我的示例使用了Git。 Git不需要服务器就可以很好地运行。 让我们看一下<scm>标签。
清单1 – <scm>标签
<scm> <url>scm:git:file: //D:/Projects/thoth-maven-release-plugin/.git</url> <url>scm:git:file: //D:/Projects/thoth-maven-release-plugin/.git</url> <connection> scm:git:file: //D:/Projects/thoth-maven-release-plugin/.git</connection> scm:git:file: //D:/Projects/thoth-maven-release-plugin/.git</connection> <developerConnection> scm:git:file: //D:/Projects/thoth-maven-release-plugin/.git scm:git:file: //D:/Projects/thoth-maven-release-plugin/.git </developerConnection> </scm>
清单1中的代码显示了<scm>标记的配置。 显然,对我的计算机文件系统上项目的.git
文件夹的引用对您来说应该很突出。 您必须为您的计算机更改此值。 请记住,目标是在本地工作! 此配置将您带到那里。
配置<scm>标记后,下一步是配置maven-release-plugin。 接下来让我们看看。
POM Maven-发布插件
第三件事是配置maven-release-plugin工件。 此配置用于Maven登台存储库。
相关配置如下,请参阅GitHub上的完整pom.xml 。 让我们看一下这个配置。
清单2 – maven-release-plugin标签
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-release-plugin</artifactId> <version> 2.5 . 1 </version> <dependencies> <dependency> <groupId>org.apache.maven.shared</groupId> <artifactId>maven-invoker</artifactId> <version> 2.2 </version> </dependency> </dependencies> <configuration> <stagingRepository> localforme:: default ::file: //C:/Users/Michael/.m2/repository ::file: //C:/Users/Michael/.m2/repository </stagingRepository> </configuration> </plugin> .... </build>
第6行将maven-release-plugin设置为2.5.1
版。 这是我研究时(2019年第二季度)的最新情况。 使用低于2.5.2
的版本还有一些其他问题,我将在接下来的内容中介绍。
第8行将maven-invoker依赖项设置为2.2
版。 Maven 3.3将脚本名称(在Windows上)从mvn.bat
更改为mvn.cmd
。 2.5.2
版以下的maven-release-plugin假定为mvn.bat
。 将maven-invoker更改为2.2
版会将假设更改为mvn.cmd
以便可以使用Maven 3.3+(Lucas,2015年)。 如果您使用大于或等于2.5.2
版的maven-release-plugin,则不需要此maven-invoker配置。
第15行设置Maven登台存储库的位置。 通常,您可以在settings.xml
中进行settings.xml
。 如果未设置,则会出现构建错误。 我在这里展示了如何配置它。 如果您在settings.xml
拥有它,则可以删除此配置。
现在已经配置了pom.xml
,接下来让我们看看如何运行它。
MVN命令
现在已经设置好配置,是时候运行Maven项目并测试一切正常了。 清单3显示了mvn
的属性和开关。
清单3 – mvn命令
mvn -Dmaven.test.skip= true -Dmaven.javadoc.failOnError= false --batch-mode release:clean release:prepare release:stage
此命令行没有太多内容。 第4行是最重要的。 它指定要执行的Maven-release-plugin目标。
现在您可以进行测试了。 运行命令,看看会发生什么。
摘要
如果使用的是NetBeans这样的IDE,当在文件系统上检测到更改时自动监视并重新加载文件,则可以打开pom.xml
,然后运行mvn
命令,最后观察<version>标记随着Maven的变化而自动更改。运行。 这样,您可以从<version>标记的任意值开始,并研究如何自动更改它。 请享用!
参考文献
卢卡斯 (2015年7月1日)。 无法执行预先准备的目标Maven [Web日志注释]。 堆栈溢出。 从https://stackoverflow.com/questions/29755620/failed-to-execute-goal-maven-releaseprepare检索。
翻译自: https://www.javacodegeeks.com/2020/02/testing-maven-release-plugin-auto-increment-version-number.html