当前位置: 首页 > article >正文

使用 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.kler.cn/a/503476.html

相关文章:

  • 计算机网络(五)——传输层
  • 计算机网络速成
  • Java语言的正则表达式
  • 备战蓝桥杯:树的存储与遍历(dfs和bfs)
  • 欧拉公式和傅里叶变换
  • FFmpeg入门
  • JUC Java并发编程 高级 学习大纲 动员
  • 保姆级图文详解:Linux和Docker常用终端命令
  • Mac玩Steam游戏秘籍!
  • Knife4j生成和展示API文档工具
  • Python自学 - “包”的创建与使用(从头晕到了然)
  • 电子邮件安全及核心概念
  • 探索AI与鸿蒙开发新领域:从《星火AI使用指南》到《鸿蒙应用开发宝典》
  • 远程连接不上怎么回事?
  • HTML5 滚动动画详解
  • 常见的php框架有哪几个?
  • 利用Java爬虫按图搜索1688商品(拍立淘)的实践指南
  • npm install 报错常见的解决方法
  • 论文阅读:SplatMAP: Online Dense Monocular SLAM with 3D Gaussian Splatting
  • 解决VMWare虚拟机“无法获取vmci驱动程序版本”的问题
  • 如何应对突然忘记 MySQL 登录密码的情况?
  • 宁德时代C++后端开发面试题及参考答案
  • 【DevOps】Jenkins配置钉钉邮件通知
  • Certificates do not conform to algorithm constraints
  • 【HarmonyOS之旅】基于ArkTS开发(二) -> UI开发二
  • 图形和动画本地化