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

news/2025/1/16 3:47:28 标签: maven, java

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


mavenplugin_5">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 解决这个问题。


mavenplugin_POM__66">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

mavenplugin__flattenmavenplugin_127">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
    

参考文档


(END)


http://www.niftyadmin.cn/n/5824613.html

相关文章

计算机网络 (35)TCP报文段的首部格式

前言 计算机网络中的TCP&#xff08;传输控制协议&#xff09;报文段的首部格式是TCP协议的核心组成部分&#xff0c;它包含了控制TCP连接的各种信息和参数。 一、TCP报文段的结构 TCP报文段由首部和数据两部分组成。其中&#xff0c;首部包含了控制TCP连接的各种字段&#xff…

JavaScript系列(25)--性能优化技术详解

JavaScript性能优化技术详解 ⚡ 今天&#xff0c;让我们深入探讨JavaScript的性能优化技术。掌握这些技术对于构建高性能的JavaScript应用至关重要。 性能优化基础 &#x1f31f; &#x1f4a1; 小知识&#xff1a;JavaScript性能优化涉及多个方面&#xff0c;包括代码执行效…

学习软件工程产品质量模型

在软件工程领域&#xff0c;产品质量模型是确保软件产品满足用户需求、具备良好性能和可靠性的重要工具。通过对产品质量模型的深入学习和理解&#xff0c;软件开发者能够设计出高质量的软件产品&#xff0c;提升用户体验&#xff0c;增强市场竞争力。本文将详细介绍软件工程产…

OpenCV实现多尺度细节提升算法

1、算法原理 多尺度细节提升算法来源于论文*《DARK IMAGE ENHANCEMENT BASED ON PAIRWISE TARGET CONTRAST AND MULTI-SCALE DETAIL BOOSTING》*&#xff0c;算法主要是解决细节增强算法中噪声和细节的平衡问题。 常规的非锐化掩蔽&#xff08;USM&#xff09;算法在提升细节…

基于SpringBoot的物业管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

【Linux】8.Linux基础开发工具使用(2)

文章目录 1. Linux编译器-gcc/g使用关于sudo1.1 背景知识1.2 gcc如何完成1.2.1 预处理(进行宏替换)1.2.2 编译&#xff08;生成汇编&#xff09;1.2.3 汇编&#xff08;生成机器可识别代码&#xff09;1.2.4 连接&#xff08;生成可执行文件或库文件&#xff09;1.2.5 总结 1.3…

爬虫逆向学习(十五):Akamai 3.0反爬分析与sensor-data算法逆向经验

此分享只用于学习用途&#xff0c;不作商业用途&#xff0c;若有冒犯&#xff0c;请联系处理 Akamai 3.0反爬分析与sensor-data算法逆向经验 Akamai开始正题前须知站点信息接口分析反爬点反爬点定位_abck定位结果 逆向前准备工作sensor_data生成位置本地替换文件 请求体sensor…

在kubernetes中部署Nacos集群

在kubernetes中部署Nacos集群 1.Nacos介绍1.1 什么是Nacos1.2 主要功能1.3 应用场景 2.部署Nacos集群实践2.1 NFS动态提供Kubernetes后端存储卷2.2 Nacos集群 1.Nacos介绍 1.1 什么是Nacos Nacos&#xff08;全称为"Dynamic Naming and Configuration Service"&…