使用 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)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python】Python之locust压测教程+从0到1demo:基础轻量级压测实战(1)

文章目录 一、什么是Locust二、Locust 架构组成三、实战 Demo准备一个可调用的接口编写一个接口测试用例编写一个性能测试用例执行性能测试用例代码1、通过 Web UI 执行&#xff08;GUI模式&#xff09;2、通过命令行执行&#xff08;非GUI模式&#xff09; 小知识&#xff1a;…

Microsoft

Microsoft Word目录1.目录编号与文字的间距设置2. 目录编号缩进设置 Excel函数MID&#xff08;提取字符&#xff09;CONCAT&#xff08;组合字符串&#xff09;EXACT&#xff08;比较字符串&#xff09; PowerPointwindows 11 恢复右键传统菜单 Word 目录 1.目录编号与文字的…

用 Python 处理 CSV 和 Excel 文件

&#x1f496; 欢迎来到我的博客&#xff01; 非常高兴能在这里与您相遇。在这里&#xff0c;您不仅能获得有趣的技术分享&#xff0c;还能感受到轻松愉快的氛围。无论您是编程新手&#xff0c;还是资深开发者&#xff0c;都能在这里找到属于您的知识宝藏&#xff0c;学习和成长…

JS后盾人--再一次的走进JS?

程序跑起来与避免延迟 如果你讲JS&#xff0c;你就不可能只讲JS 后盾人说开发就要用VScode&#xff08;确实&#xff0c;Windows和Linux都可以跑&#xff09; 然后就是第一天开发的时候装的那些插件 前端访问流程基本分析 托管到服务器上的东西&#xff0c;谁访问下载到谁的…

Android 调用系统服务接口获取屏幕投影(需要android.uid.system)

媒体投影 借助 Android 5&#xff08;API 级别 21&#xff09;中引入的 android.media.projection API&#xff0c;您可以将设备屏幕中的内容截取为可播放、录制或投屏到其他设备&#xff08;如电视&#xff09;的媒体流。 Android 14&#xff08;API 级别 34&#xff09;引入…

PT8M2102 触控型 8Bit MCU

1. 产品概述 PT8M2102 是一款基于 RISC 内核的 8 位 MTP 单片机&#xff0c;内部集成了电容式触摸感应模块、 TIMER 、 PWM、 LVR 、 LVD 、 WDT 等外设&#xff0c;其主要用作触摸按键开关&#xff0c;广泛适用于触控调光、电子玩具、消 费电子、家用电器等领域&am…

LangGraph 教程:初学者综合指南(2)

工具集成 将工具集成到 LangGraph 聊天机器人中可以显着增强其功能&#xff0c;使其能够按照您喜欢的方式访问和处理信息。 让我们修改上一节中创建的基本聊天机器人&#xff0c;以包含一个可以在网络上搜索信息的工具。我们将使用langchain_中community.tools TavilySearchR…

项目练习:若依管理系统字典功能-Vue前端部分

文章目录 一、情景说明二、若依Vue相关代码及配置1、utils代码2、components组件3、api接口代码4、main.js配置 三、使用方法1、html部分2、js部分 一、情景说明 我们在做web系统的时候&#xff0c;肯定会遇到一些常量选择场景。 比如&#xff0c;性别&#xff1a;男女。 状态…

oracle闪回表

文章目录 闪回表案例1&#xff1a;&#xff08;未清理回收站时的闪回表--成功&#xff09;案例2&#xff08;清理回收站时的闪回表--失败&#xff09;案例3&#xff1a;彻底删除表&#xff08;不经过回收站--失败&#xff09;案例4&#xff1a;闪回表之后重新命名新表总结1、删…

TensorFlow Quantum快速编程(基本篇)

一、TensorFlow Quantum 概述 1.1 简介 TensorFlow Quantum(TFQ)是由 Google 开发的一款具有开创性意义的开源库,它宛如一座桥梁,巧妙地将量子计算与 TensorFlow 强大的机器学习功能紧密融合。在当今科技飞速发展的时代,传统机器学习虽已取得诸多瞩目成就,然而面对日益…

K8s数据存储之详解(Detailed Explanation of K8s Data Storage)

K8s数据存储相关概念详解&#xff08;临时存储&#xff0c;节点存储&#xff0c;网络存储&#xff0c;PV/PVC&#xff09; 本篇文章分享一下存储卷和数据持久化的相关概念&#xff1a; 存储卷概述 临时存储卷&#xff08;Ephemeral Volumes&#xff09; 节点存储卷&#xff…

java求职学习day12

1 泛型机制&#xff08;熟悉&#xff09; 1.1 基本概念 &#xff08;1&#xff09;通常情况下集合中可以存放不同类型的元素&#xff0c;是因为将所有对象都看作Object类型放入&#xff0c;因此从集合中取出元素时&#xff0c;也是Object类型&#xff0c;为了表达该元素真实的…

相加交互效应函数发布—适用于逻辑回归、cox回归、glmm模型、gee模型

在统计分析中交互作用是指某因素的作用随其他因素水平变化而变化&#xff0c;两因素共同作用不等于两因素单独作用之和(相加交互作用)或之积(相乘交互作用)。相互作用的评估是尺度相关的&#xff1a;乘法或加法。乘法尺度上的相互作用意味着两次暴露的综合效应大于&#xff08;…

Spring Boot 2 学习全攻略

Spring Boot 2 学习资料 Spring Boot 2 学习资料 Spring Boot 2 学习资料 在当今快速发展的 Java 后端开发领域&#xff0c;Spring Boot 2 已然成为一股不可忽视的强大力量。它简化了 Spring 应用的初始搭建以及开发过程&#xff0c;让开发者能够更加专注于业务逻辑的实现&am…

【面试题】技术场景 4、负责项目时遇到的棘手问题及解决方法

工作经验一年以上程序员必问问题 面试题概述 问题为在负责项目时遇到的棘手问题及解决方法&#xff0c;主要考察开发经验与技术水平&#xff0c;回答不佳会影响面试印象。提供四个回答方向&#xff0c;准备其中一个方向即可。 1、设计模式应用方向 以登录为例&#xff0c;未…

30分钟内搭建一个全能轻量级springboot 3.4 + 脚手架 <1> 5分钟快速创建一个springboot web项目

快速导航 <1> 5分钟快速创建一个springboot web项目 <2> 5分钟集成好最新版本的开源swagger ui&#xff0c;并使用ui操作调用接口 <3> 5分钟集成好druid并使用druid自带监控工具监控sql请求 <4> 5分钟集成好mybatisplus并使用mybatisplus generator自…

【Rust自学】11.10. 集成测试

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 11.10.1. 什么是集成测试 在Rust里&#xff0c;集成测试完全位于被测试库的外部。集成测试调用库的方式和其他代码一样&#xff0c;这也…

JAVA实现2048小游戏(附源码)

文章目录 一、设计来源2048小游戏讲解1.1 主界面1.2 4*4难度界面1.3 5*5难度界面1.4 6*6难度界面1.5 挑战失败提示界面 二、效果和源码2.1 动态效果2.2 源代码 源码下载更多优质源码分享 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/a…

【自动化测试】—— Appium安装配置保姆教程(图文详解)

目录 一. 环境准备 二. JDK安装 1. 下载JDK 2. 安装JDK 3. 配置环境 4. 验证安装 三. Android SDK安装 1. 下载Android SDK 2. 安装Android SDK 3. 安装工具 4. 配置环境 5. 验证安装 四. NodeJS安装 1. 下载NodeJS 2. 安装NodeJS 3. 验证安装 4. 安装淘宝镜像…

vs2022+QT6.7.3打包程序流程

1、新建目录test 2、将项目配置为Release X64&#xff0c;生成XXX.exe 3、将XXX.exe放到test目录 4、管理员方式打开Qt 6.7.3 (MSVC 2022 64-bit)&#xff0c;进入test目录&#xff0c;执行&#xff1a;windeployqt6.exe XXX.exe 5、管理员方式打开x64 Native Tools Command…