💡 一则也许对你有用的小广告 🏆
欢迎飞飞程序员 ,你将获得:专属的实战项目(已更新的所有会员标识的项目都能学习) / 1v1 提问 / Java 学习路线 / PHP 学习路线 / 学习打卡 / 社群讨论
截止目前, 飞飞 正在疯狂爆肝实战项目,后续还会上新更多项目,目标是将所学知识开发成项目并且分享给大家,如知识付费系统, 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 中一些对消费者不必要的信息,比如
repositories、pluginRepositories、build 等,使 POM 文件更精简。
- 支持 CI 友好变量:可以解析
${revision}、${sha1}、${changelist} 这类用于持续集成的变量占位符,让它们在发布时被替换为实际值。
- 提供多种扁平化模式:插件提供了多种
flattenMode,以适应不同场景,例如保留所有可选元素、仅解析 CI 变量、或为 BOM 文件保留依赖管理配置等。
如何工作
它的工作流程大致如下:
- 在 Maven 构建的生命周期中,该插件会生成一个名为
.flattened-pom.xml 的文件。
- 这个文件包含了经过“扁平化”处理后的项目信息。
- 当执行
mvn install 或 mvn deploy 时,Maven 会将这个 .flattened-pom.xml 作为项目的 POM 文件一同安装或部署到仓库中。
典型使用场景
- 多模块项目发布:当你希望发布的构件不依赖于父 POM 时。
- 简化依赖管理:确保发布的 POM 中包含了明确的依赖版本,方便使用者理解。
- CI/CD 流程:使用
${revision} 等变量进行版本管理时,确保发布的 POM 中版本号被正确解析。
你可以在 Maven 项目的 pom.xml 的 <build><plugins> 部分配置这个插件,通常需要指定 flattenMode 和绑定到 process-resources 或 generate-resources 生命周期阶段。