💡 一则也许对你有用的小广告 🏆

欢迎飞飞程序员   ,你将获得:专属的实战项目(已更新的所有会员标识的项目都能学习) / 1v1 提问 / Java 学习路线 / PHP 学习路线 / 学习打卡 / 社群讨论

  • 正在进行中的项目:《FFBlog知识付费博客项目》 正在持续更新中,基于 Spring Boot 3.x + JDK 21...,点击查看 ;
  • 《从零开发:FFBlog知识付费博客项目(全栈开发)》 演示链接: https://ffblog.ffcxy.com/  ;

截止目前, 飞飞  正在疯狂爆肝实战项目,后续还会上新更多项目,目标是将所学知识开发成项目并且分享给大家,如知识付费系统, Ai系统, CMS系统,在线商城系统,等等 ,欢迎点击围观

flatten-maven-plugin 是一个 Maven 插件,它的核心作用是生成一个“扁平化”的 pom.xml 文件,并让 Maven 在安装或部署构件时使用这个精简后的文件,而不是项目原始的多模块 pom.xml

它解决什么问题?

在多模块 Maven 项目中,子模块的 pom.xml 通常会通过 <parent> 标签继承父模块的配置(比如版本号、依赖管理、属性等)。当你把子模块的构件(如 jar 包)发布到 Maven 仓库后,别人拉取这个构件时,Maven 需要去解析原始的 pom.xml 文件,这个过程需要能够访问到父 pom.xml,有时会带来不必要的复杂性或解析失败的风险。

flatten-maven-plugin 通过生成一个独立的、自包含的 pom.xml 来解决这个问题。它会将父模块中定义的关键信息(如依赖版本、属性等)解析并直接“写死”到生成的扁平化 POM 中,去除对父 POM 的继承依赖,使得这个 POM 文件可以独立存在。

主要功能与特性

  • 解析依赖版本:将父 POM 中 <dependencyManagement> 定义的依赖版本号,直接解析并写入到生成的 POM 中,使依赖版本明确化。
  • 移除冗余信息:可以根据配置,移除原始 POM 中一些对消费者不必要的信息,比如 repositoriespluginRepositoriesbuild 等,使 POM 文件更精简。
  • 支持 CI 友好变量:可以解析 ${revision}${sha1}${changelist} 这类用于持续集成的变量占位符,让它们在发布时被替换为实际值。
  • 提供多种扁平化模式:插件提供了多种 flattenMode,以适应不同场景,例如保留所有可选元素、仅解析 CI 变量、或为 BOM 文件保留依赖管理配置等。

如何工作

它的工作流程大致如下:

  1. 在 Maven 构建的生命周期中,该插件会生成一个名为 .flattened-pom.xml 的文件。
  2. 这个文件包含了经过“扁平化”处理后的项目信息。
  3. 当执行 mvn installmvn deploy 时,Maven 会将这个 .flattened-pom.xml 作为项目的 POM 文件一同安装或部署到仓库中。

典型使用场景

  • 多模块项目发布:当你希望发布的构件不依赖于父 POM 时。
  • 简化依赖管理:确保发布的 POM 中包含了明确的依赖版本,方便使用者理解。
  • CI/CD 流程:使用 ${revision} 等变量进行版本管理时,确保发布的 POM 中版本号被正确解析。

你可以在 Maven 项目的 pom.xml<build><plugins> 部分配置这个插件,通常需要指定 flattenMode 和绑定到 process-resourcesgenerate-resources 生命周期阶段。

上一篇 Linux 系统上安装和使用nvm统一管理nodejs环境
已是最后一篇

全部评论(0)

头像
😃 😁 😅 😂 😍 😜 😝 🤑 🥵 🥰 😙 😎 😵 😭 😱 😖 🥳 👽 🙈 🤡 😤 💣 💯 💢 ❤️ 👍 👏 👋 👌 🤏 🙏
还没有任何评论哟~