测试Maven版本插件自动递增版本号

抽象

Maven版本插件是一个非常强大的工具,我在很大程度上依赖于它来协调软件版本。 通常,软件发行版本号遵循简单的1.0.0.0-SNAPSHOT格式。 但是最近我需要在版本号中添加限定符-类似于1.0-beta-SNAPSHOT1.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.cmd2.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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339689.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

idea spark java,IntelliJ Idea 搭建spark 开发环境

笔者介绍的是在MAC环境下使用Idea搭建spark环境。环境:spark 2.0.0scala 2.11.8maven 3.9.9idea 151.Idea的安装.Idea可以在官网上下载。熟悉java的肯定都知道这个开发利器&#xff0c;可以在官网上进行下载&#xff0c;在此就不在赘述。有免费的和付费版本&#xff0c;对于我们…

optaplanner_OptaPlanner –具有真实道路距离的车辆路线

optaplanner在现实世界中&#xff0c;车辆路径问题&#xff08;VRP&#xff09;中的车辆必须走这条路&#xff1a;它们不能在客户之间直线行驶。 大多数VRP研究论文和演示都乐于忽略此实现细节。 和我一样&#xff0c;过去。 尽管使用道路距离&#xff08;而不是空中距离&#…

php 转换数组为小写,PHP如何将数组键转换为小写?

在PHP中将数组键转换为小写&#xff0c;我们可以在不使用循环的情况下来简单实现。我们只需要使用array_change_key_case()。array_change_key_case函数有两个参数&#xff0c;一个为数组&#xff0c;另一个可以为常量“CASE_LOWER”&#xff0c;那么我们在做大项目的时候可能会…

带有PostgreSQL的Docker Compose for Spring Boot应用程序

在此博客文章中&#xff0c;您将学习如何使用PostgreSQL配置Spring Boot应用程序以与Docker Compose一起运行。 这篇博客文章涵盖&#xff1a; Spring Boot应用程序Dockerfile配置&#xff0c;在依赖关系和资源之间进行了清晰的分离 用于通过PostgreSQL运行应用程序的Docker…

java中的jpa_JPA教程–在Java SE环境中设置JPA

java中的jpaJPA代表Java Persistence API&#xff0c;它基本上是一个规范&#xff0c;描述了一种将数据持久存储到持久存储&#xff08;通常是数据库&#xff09;中的方法。 我们可以将其视为类似于Hibernate之类的ORM工具的东西&#xff0c;除了它是Java EE规范的正式组成部分…

java中给组合框加监听器,如何区分ActionEvent中的多个组合框

我有两个类&#xff0c;一个包含两个组合框的监听器类和一个监听两个组合框的监听器类。该软件是关于披萨的&#xff0c;而组合框的选择是披萨类型和数量&#xff0c;我会发布相关的代码。(gui class)private Listener listen new Listener();private JComboBox chooseItem n…

使用ArchUnit验证代码和体系结构约束

介绍 ArchUnit是一个用于根据一组自定义代码和体系结构约束检查Java代码的库。 这些约束可以在单元测试中的流畅Java API中定义。 ArchUnit可用于验证类或层之间的依赖关系&#xff0c;检查循环依赖关系等等。 在本文中&#xff0c;我们将创建一些示例规则&#xff0c;以了解如…

php中des加密cbc模式,php中加密解密DES类的简单使用方法示例

本文实例讲述了php中加密解密DES类的简单使用方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;在平时的开发工作中&#xff0c;我们经常会对关键字符进行加密&#xff0c;可能为了安全 也可能为了规范&#xff0c;所以要正确使用DES加密解密代码1:class DES{var $k…

hibernate自定义_如何自定义Hibernate脏检查机制

hibernate自定义介绍 在上一篇文章中&#xff0c;我描述了Hibernate自动脏检查机制。 尽管您应该始终喜欢它&#xff0c;但是有时您可能想添加自己的自定义污垢检测策略。 自定义脏检查策略 Hibernate提供以下定制机制&#xff1a; Hibernate拦截器#findDirty&#xff08;&am…

php 读取文件fread,PHP: 读取文件 fgets 和 fread 的差异

程序在写时, 何时要用 fgets? 何时要用 fread? 主要的差异在哪边? 以下就用简单的范例来说明~先创建一个文件: /tmp/readfile.txt, 内容如下:abcdefg123456789写两只简单的小程序:fgets 版$handle fopen(/tmp/readfile.txt, "r");$contents ;if ($handle) {whil…

java 并发线程_Java并发教程–线程之间的可见性

java 并发线程当在不同线程之间共享对象的状态时&#xff0c;除了原子性外&#xff0c;其他问题也会发挥作用。 其中之一是可见性。 关键事实是&#xff0c;如果没有同步&#xff0c;则不能保证指令按照它们在源代码中出现的顺序执行。 这不会影响单线程程序中的结果&#xff…

php实现中间件6,说一说ThinkPHP6中五花八门的中间件_PHP开发框架教程

thinkphp配置配置多应用多配置的方法_PHP开发框架教程一般的thinkphp框架一般都是单模块开发的&#xff0c;但有时候我们可能需要进行多模块开发&#xff0c;本文就来为大家介绍一下thinkphp配置多模块、多应用的方法。在ThinkPHP6中新增中间件功能&#xff0c;而且中间件又分很…

oracle怎么格式化sql语句,Oracle sqlplus格式化数据

SQL>set colsep ;     //-域输出分隔符SQL>set newp none //设置查询出来的数据分多少页显示&#xff0c;如果需要连续的数据&#xff0c;中间不要出现空行就把newp设置为none&#xff0c;这样输出的数据行都是连续的&#xff0c;中间没有空行之类的SQL&g…

使用Java迭代器修改数据时要小心

随着本学期的结束&#xff0c;我想我会分享一个关于我对Java迭代器非常非常熟悉的小故事。 现实世界语境 就上下文而言&#xff0c;我教第二年的软件组件课程&#xff0c;这是尝试进入该专业的学生的最后障碍。 当然&#xff0c;这门课程对学生来说压力很大&#xff0c;我经常…

oracle添加表的索引,oracle批量添加指定表前缀的索引SQL语句

oracle批量添加指定表前缀的索引SQL语句需要输入用户名&#xff0c;表空间&#xff0c;索引个数&#xff0c;表名前缀&#xff0c;过滤的表名后缀##需要输入用户名&#xff0c;表空间&#xff0c;索引个数&#xff0c;表名前缀&#xff0c;过滤的表名后缀declare--用户名userNa…

javafx隐藏_JavaFX技巧14:StackPane子项-隐藏但不消失

javafx隐藏另一个简短提示&#xff1a;Swing提供了一个名为CardLayout的布局管理器&#xff0c;该管理器管理容器内的一组组件&#xff08;卡&#xff09;&#xff0c;但始终仅显示其中一个。 方法CardLayout.show&#xff08;Container &#xff0c;String&#xff09;允许在组…

oracle yyyy和yy,Oracle PL / SQL:SYSDATE与’DD-MMM-YY’的区别?

在Oracle中,DATE值 – 尽管名称 – 也包含时间部分. SYSDATE包含当前日期和当前时间(最多秒).默认情况下,Oracle工具(愚蠢地)隐藏DATE值的时间部分.如果您运行&#xff1a;select to_char(sysdate,yyyy-mm-dd hh24:mi:ss) as sysdatefrom dual;你可以看到.所以SYSDATE可能是201…

维持硒测试自动化的完美方法

毫无疑问&#xff0c; 自动浏览器测试已经改变了软件开发的工作方式。 如果不是Selenium&#xff0c;我们将无法像我们一样使用各种各样的无错误Web应用程序。 但是有时&#xff0c;甚至IT部门也误解了自动化一词。 大多数人认为计算机将为他们完成所有测试&#xff01; 他们最…

oracle42997,oracle与db2的比较

在DB2中从客户端访问服务器端的数据库时&#xff0c;不能直接用connect命令&#xff0c;而必须先建立通信node&#xff0c;再在node的基础上建立数据库连接。在命令行的具体操作如下&#xff1a;->db2 catalog tcpip node ABC remote serverName server 50000->db2 catal…

双色球霸主网络问题_霸主–统治和管理API的地方

双色球霸主网络问题今天我们生活在一个越来越分散的世界中。 如今的计算机系统不再是在随机桌子下面的某些硬件上运行单个部门项目&#xff0c;而是大规模&#xff0c;集中甚至分散地运行。 监视和管理的需求从未改变&#xff0c;但是随着时间的推移变得越来越复杂。 如果将所有…