使用 versions-maven-plugin 和 flatten-maven-plugin 插件惯例 maven 项目版本

在 Maven 项目中,依赖版本管理和 POM 文件的规范化是确保项目可维护性和一致性的关键。今天,我们将介绍两个强大的 Maven 插件:versions-maven-pluginflatten-maven-plugin,它们可以帮助我们更高效地管理项目版本和 POM 文件。


1. versions-maven-plugin:自动化依赖版本管理

versions-maven-plugin 是一个用于管理 Maven 项目依赖版本的插件。它可以帮助我们自动更新依赖版本、统一管理版本号、解决版本冲突等。

核心功能:
  • 更新依赖版本:自动检查并更新依赖到最新版本。
  • 设置版本号:动态设置项目或依赖的版本号。
  • 版本锁定:锁定快照版本,避免意外更新。
  • 版本比较:比较本地项目和远程仓库的依赖版本。

自 Maven 3.5.0-beta-1 开始,可以使用 ${revision}、${sha1}、${changelist} 这样的变量作为版本占位符,只有这样的引用符才可以被替换(请勿自定义其他变量)。

示例:
<project><modelVersion>4.0.0</modelVersion><groupId>com.shanhy</groupId><artifactId>demo-parent</artifactId><name>Demo</name><version>${revision}</version><properties><revision>1.0.1</revision></properties>...
</project>

在自模块的 parent 节点中也可以使用 revision 变量。

操作命令:

# 更新所有依赖到最新版本
mvn versions:update-dependencies# 设置项目版本号
mvn versions:set -DnewVersion=2.0.0# 锁定快照版本
mvn versions:lock-snapshots

通过 versions-maven-plugin,我们可以轻松实现依赖版本的自动化管理,减少手动维护的工作量。

但是仅仅这样还不够,因为 installdeploy 时,版本占位符将不能被替换。这将导致 Install / Deploy 后, maven 不能识别。

下面使用 flatten-maven-plugin 解决这个问题。


2. flatten-maven-plugin:简化 POM 文件

flatten-maven-plugin 是一个用于简化 POM 文件的插件。它可以将复杂的 POM 文件转换为扁平化的结构,便于发布和共享。

核心功能:
  • 扁平化 POM:生成一个简化版的 POM 文件,去除不必要的继承和依赖管理。
  • 版本锁定:在扁平化过程中锁定依赖版本,确保构建的一致性。
示例:

在你的父工程中设置插件。父工程的 pom.xml 中配置 flatten-maven-plugin

<build><plugins><plugin><groupId>org.codehaus.mojo</groupId><artifactId>flatten-maven-plugin</artifactId><version>${flatten-maven-plugin.version}</version><configuration><updatePomFile>true</updatePomFile><flattenMode>resolveCiFriendliesOnly</flattenMode></configuration><executions><execution><id>flatten</id><phase>process-resources</phase><goals><goal>flatten</goal></goals></execution><execution><id>flatten-clean</id><phase>clean</phase><goals><goal>clean</goal></goals></execution></executions></plugin></plugins>
</build>

然后重新 clean、install 一下,你会发现每个模块根目录下多了一个 .flattened-pom.xml

updatePomFile 属性表示是否将生成的 .flattened-pom.xml 作为当前项目的 pom 文件。默认只有打包的时候(package、install、deploy)会将 .flattened-pom.xml 做为当前项目的 pom 文件,但是打包类型 pom 的 pom.xml 中的占位符是不会被替换的。如果想要都被替换,那就将 updatePomFile 的属性设置为 true。如果 flattenMode 被设置为 bomupdatePomFile 默认属性值为 true

最后,运行以下命令颜值生成的扁平化 POM:

mvn clean package

3. 结合使用 versions-maven-pluginflatten-maven-plugin

通过结合使用这两个插件,我们可以实现以下目标:

  1. 自动化版本管理:使用 versions-maven-plugin 自动更新依赖版本。
  2. 简化 POM 文件:使用 flatten-maven-plugin 生成扁平化的 POM 文件,解决变量能被正确替换为具体版本的问题。
示例命令步骤:
  1. 更新依赖版本

    mvn versions:update-dependencies
    
  2. 扁平化 POM 文件

    mvn clean package
    
  3. 发布项目

    mvn deploy
    

参考文档

  • versions-maven-plugin
  • flatten-maven-plugin

(END)

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

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

相关文章

【Vue】Vue 拖拽指令 禁选文字 解决子元素 input 不能输入 、拖动粘连鼠标

directives: { drag(el) { // 解决拖动会选中文字的问题 document.onselectstart () > { return false } el.onmousedown function (event) { // 解决子元素 input 框无法输入等情况 if(event.target?.nodeName INPUT || event.target?.nodeName IMG) { return } cons…

freertos的基础(二)内存管理:堆和栈

1. 堆&#xff08;Heap&#xff09; 定义 堆是 FreeRTOS 中用于动态内存分配的内存区域。FreeRTOS 提供了多种堆管理方案&#xff08;如 heap_1、heap_2、heap_4 等&#xff09;&#xff0c;开发者可以根据需求选择合适的内存管理策略。 作用 用于动态分配内存&#xff0c;例…

Linux-----进程通讯(消息队列)

目录 相关API 1.相关数据类型 mqd_t struct mq_attr struct timespec 2.相关系统调用接口 mq_open() mq_timedsend() && mq_send() mq_timedreceive() && mq_receive() mq_unlink() clock_gettime() 父子进程使用消息队列通讯 平行进程使用消息队列…

【微服务】面试题 5、分布式系统理论:CAP 与 BASE 详解

分布式系统理论&#xff1a;CAP 与 BASE 详解 一、CAP 定理 背景与定义&#xff1a;1998 年由加州大学科学家埃里克布鲁尔提出&#xff0c;分布式系统存在一致性&#xff08;Consistency&#xff09;、可用性&#xff08;Availability&#xff09;、分区容错性&#xff08;Part…

数据结构与算法之二叉树: LeetCode 572. 另一棵树的子树 (Ts版)

另一棵树的子树 https://leetcode.cn/problems/subtree-of-another-tree/description/ 描述 给你两棵二叉树 root 和 subRoot检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false二叉树 tree …

NineData云原生智能数据管理平台新功能发布|2024年12月版

本月发布 7 项更新&#xff0c;其中重点发布 2 项、功能优化 5 项。 重点发布 数据库 Devops - Oracle 非表对象支持可视化创建与管理 Oracle 非表对象&#xff0c;包括视图&#xff08;View&#xff09;、包&#xff08;Package&#xff09;、存储过程&#xff08;Procedur…

[Unity]MacOS下开发Unity

需要的插件 我使用的是vscode&#xff0c;经过长时间的使用我发现一个问题就是很多插件都是动态的在变化的&#xff0c;不是一成不变的&#xff0c;可能是重构&#xff0c;可能直接换了其他的工具。 所以这个插件也会是更新的状态。 2025年01月08日更新 .NET Install Tool (…

项目开发实践——基于SpringBoot+Vue3实现的在线考试系统(五)

文章目录 一、学生管理模块功能实现1、添加学生功能实现1.1 页面设计1.2 前端功能实现1.3 后端功能实现1.4 效果展示2、学生管理功能实现2.1 页面设计2.2 前端功能实现2.3 后端功能实现2.3.1 后端查询接口实现2.3.2 后端编辑接口实现2.3.3 后端删除接口实现2.4 效果展示二、代码…

实现一个VSCode插件(从创建到发布)

实现一个自己的VSCode 插件 本文将以 yo 为例&#xff0c; 实现一个 VS Code 插件 从创建到发布。 文章目录 实现一个自己的VSCode 插件1. 初始化项目2. 项目结构3. 实现插件功能4. 测试和运行插件5. 发布6. 下载自己发布的插件 1. 初始化项目 首先&#xff0c;我们需要安装 …

GO随记:不使用主键id 如何分表与mysql大表

为什么我们会面临分表问题&#xff1f; 当单表数据量过大&#xff0c;导致查询性能变差时&#xff0c;我们可以将这个大的数据表&#xff0c;按照一定的规则拆分成多个较小的数据表&#xff0c;从而提升表数据查询的性能。 举个例子 &#xff1a; 附近的人 如何去做&#xff1…

Unity TextMesh Pro入门

概述 TextMesh Pro是Unity提供的一组工具&#xff0c;用于创建2D和3D文本。与Unity的UI文本和Text Mesh系统相比&#xff0c;TextMesh Pro提供了更好的文本格式控制和布局管理功能。 本文介绍了TMP_Text组件和Tmp字体资产(如何创建字体资产和如何解决缺字问题),还有一些高级功…

【教程】数据可视化处理之2024年各省GDP排名预测!

过去的一年里&#xff0c;我国的综合实力显著提升&#xff0c;在新能源汽车、新一代战机、两栖攻击舰、航空航天、芯片电子、装备制造等领域位居全球前列。虽然全国各省市全年的经济数据公布还需要一段时间&#xff0c;但各地的工业发展数据&#xff0c;财政收入数据已大概揭晓…

c#13新特性

C# 13 即 .NET 9 按照计划会在2024年11月发布&#xff0c;目前一些新特性已经定型&#xff0c;让我们来预览一个比较大型比较重要的新特性。 正文 扩展类型 Extension types 在5月份的微软 Build 大会中的 What’s new in C# 13 会议上&#xff0c;两位大佬花了很长的篇幅来…

后端:Spring(IOC、AOP)

文章目录 1. Spring2. IOC 控制反转2-1. 通过配置文件定义Bean2-1-1. 通过set方法来注入Bean2-1-2. 通过构造方法来注入Bean2-1-3. 自动装配2-1-4. 集合注入2-1-5. 数据源对象管理(第三方Bean)2-1-6. 在xml配置文件中加载properties文件的数据(context命名空间)2-1-7. 加载容器…

从CentOS到龙蜥:企业级Linux迁移实践记录(龙蜥开局)

引言&#xff1a; 在我们之前的文章中&#xff0c;我们详细探讨了从CentOS迁移到龙蜥操作系统的基本过程和考虑因素。今天&#xff0c;我们将继续这个系列&#xff0c;重点关注龙蜥系统的实际应用——特别是常用软件的安装和配置。 龙蜥操作系统&#xff08;OpenAnolis&#…

一.项目课题 <基于TCP的文件传输协议实现>

客户端代码 需要cJSON.c文件和cJSON.h文件 在这里插入代码片#include "myheadth.h" #include "myfun.h"#define TIME 10 int sockfd; void heartbeat(int signum) {cJSON* root cJSON_CreateObject();cJSON_AddStringToObject(root,"request"…

Type-C双屏显示器方案

在数字化时代&#xff0c;高效的信息处理和视觉体验已成为我们日常生活和工作的关键需求。随着科技的进步&#xff0c;一款结合了便携性和高效视觉输出的设备——双屏便携屏&#xff0c;逐渐崭露头角&#xff0c;成为追求高效工作和娱乐体验人群的新宠。本文将深入探讨双屏便携…

AI开发 - 算法基础 递归 的概念和入门(三)递归的进阶学习

前面我们通过2篇文章&#xff0c;一起了解了 递归&#xff0c;以及使用递归来解决汉诺塔问题。今天我们在这个基础上&#xff0c;进一步地熟悉和学习递归。 这篇学习笔记将涵盖递归的基本概念、应用、优化技巧、陷阱及与迭代的对比&#xff0c;并通过具体的 Python 代码示例和…

【C++多线程编程:六种锁】

目录 普通互斥锁&#xff1a; 轻量级锁 独占锁&#xff1a; std::lock_guard&#xff1a; std::unique_lock: 共享锁&#xff1a; 超时的互斥锁 递归锁 普通互斥锁&#xff1a; std::mutex确保任意时刻只有一个线程可以访问共享资源&#xff0c;在多线程中常用于保…

计算机视觉算法实战——车道线检测

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​​​​​​ ​​​​​​​​​​​​ ​​​​​ 车道线检测是计算机视觉领域的一个重要研究方向&#xff0c;尤其在自动驾驶和高级驾驶辅助…