文章目录
maven-plugin:工程模块统一版本依赖首图" />
前言
博主介绍:✌目前全网粉丝3W+,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。
涵盖技术内容:Java后端、大数据、算法、分布式微服务、中间件、前端、运维等。
博主所有博客文件目录索引:博客目录索引(持续更新)
CSDN搜索:长路
视频平台:b站-Coder长路
mavenplugin_21">一、认识flatten-maven-plugin插件
flatten-maven-plugin
是一个由 MojoHaus 组织维护的 Maven 插件,主要用于解决 Maven 多模块项目中 POM 文件继承导致的复杂依赖问题。以下是该插件的详细介绍和功能:
核心功能:
- 扁平化 POM 文件:
- 插件会生成一个简化版的
pom.xml
文件(通常命名为.flattened-pom.xml
),去除不必要的继承和依赖管理。 - 在安装(
install
)和部署(deploy
)阶段,Maven 会使用这个扁平化的 POM 文件,而不是原始的 POM 文件。
- 插件会生成一个简化版的
- 解决占位符问题:
- 统一版本管理:
- 通过在父模块中定义版本号(如
${revision}
),所有子模块可以继承该版本号,从而实现版本的统一管理。 - 插件支持在构建过程中动态替换版本号,减少手动修改版本号的工作量。
- 通过在父模块中定义版本号(如
使用场景:
- 多模块项目:在多模块项目中,父模块定义了版本号和依赖管理,子模块继承父模块的配置。
flatten-maven-plugin
可以确保在构建过程中正确处理版本号和依赖。 - CI/CD 环境:在持续集成和持续部署环境中,插件可以确保生成的 POM 文件在远程仓库中可以被正确解析。
mavenplugin_42">二、如何使用flatten-maven-plugin插件?
mavenplugin_44">未使用flatten-maven-plugin插件之前的情况描述
在此之前我有将一个单体模块拆分为多模块,此时多模块就意味着多个模块都需要有一个version版本号:
自模块点入进去都有这个版本号:
如何使用全局的一个版本即可控制多个模块下的版本呢?此时就可以使用到flatten-maven-plugin插件。
mavenplugin_60">配置flatten-maven-plugin插件
步骤1:最外层父模块安装插件&配置版本变量
.
pom.xml如下:
1)最外层父模块安装插件
<!-- 定义 flatten-maven-plugin 的版本号 -->
<maven.flatten.version>1.2.5</maven.flatten.version><build><plugins><plugin><!-- 插件的 GroupId,标识插件所属的组织 --><groupId>org.codehaus.mojo</groupId><!-- 插件的 ArtifactId,标识插件的名称 --><artifactId>flatten-maven-plugin</artifactId><!-- 插件的版本号,这里通过变量引用上面定义的版本号 --><version>${maven.flatten.version}</version><configuration><!-- 配置扁平化后的 POM 文件的名称 --><flattenedPomFilename>pom-xml-flattened</flattenedPomFilename><!-- 是否更新原始 POM 文件 --><updatePomFile>true</updatePomFile><!-- 指定扁平化模式,resolveCiFriendliesOnly 表示仅解析 CI 友好的占位符 --><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>
2)设置变量,控制版本内容
<version>${revision}</version>
<revision>1.2.0</revision>
步骤2:各个自模块使用版本使用变量替换即可
<version>${revision}</version>
后续修改版本方式
对于后续如果对于整个工程进行版本升级,只需要对最外层模块的pom.xml的版本来进行变更即可:
mavenplugin_153">详细说明flatten-maven-plugin插件配置参数
1. 版本号定义
<maven.flatten.version>1.2.5</maven.flatten.version>
- 这里定义了一个 Maven 属性
maven.flatten.version
,用于指定flatten-maven-plugin
的版本号。通过这种方式,可以在多个地方复用版本号,便于版本升级时统一修改。
2. 插件配置
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
<version>${maven.flatten.version}</version>
groupId
:标识插件所属的组织,这里是org.codehaus.mojo
,表示该插件由 MojoHaus 组织维护。artifactId
:标识插件的名称,这里是flatten-maven-plugin
。version
:指定插件的版本号,通过${maven.flatten.version}
引用了前面定义的版本号属性。
3. 配置部分
<configuration><flattenedPomFilename>pom-xml-flattened</flattenedPomFilename><updatePomFile>true</updatePomFile><flattenMode>resolveCiFriendliesOnly</flattenMode>
</configuration>
flattenedPomFilename
:指定生成的扁平化 POM 文件的名称。默认情况下,扁平化后的 POM 文件名为.flattened-pom.xml
,这里自定义为pom-xml-flattened
。updatePomFile
:设置为true
表示在构建过程中更新原始 POM 文件。这意味着在构建完成后,原始 POM 文件会被替换为扁平化后的版本。flattenMode
:指定扁平化的模式。resolveCiFriendliesOnly
表示仅解析 CI 友好的占位符(如${revision}
等)。这种模式适用于 CI/CD 环境,确保生成的 POM 文件可以被远程仓库正确解析。
4. 执行配置
<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>
executions
:定义了插件的执行配置,包括在哪些生命周期阶段执行哪些目标。execution
:每个<execution>
定义了一次插件的执行配置。id
:每次执行的唯一标识。例如,flatten
表示扁平化操作,flatten.clean
表示清理操作。phase
:指定插件绑定的生命周期阶段。process-resources
:在process-resources
阶段执行扁平化操作,通常在编译之前。clean
:在clean
阶段执行清理操作,用于清理生成的扁平化文件。
goals
:定义插件执行的目标。flatten
:执行扁平化操作,生成扁平化的 POM 文件。clean
:执行清理操作,删除生成的扁平化文件。
总结
这段配置的作用是:
- 在
process-resources
阶段,执行扁平化操作,生成一个扁平化的 POM 文件(名称为pom-xml-flattened
),并更新原始 POM 文件。 - 在
clean
阶段,清理生成的扁平化文件,确保项目目录的整洁。
通过这种配置,flatten-maven-plugin
可以有效解决多模块项目中 POM 文件继承导致的复杂依赖问题,确保生成的 POM 文件在远程仓库中可以被正确解析。
资料获取
大家点赞、收藏、关注、评论啦~
精彩专栏推荐订阅:在下方专栏👇🏻
- 长路-文章目录汇总(算法、后端Java、前端、运维技术导航):博主所有博客导航索引汇总
- 开源项目Studio-Vue—校园工作室管理系统(含前后台,SpringBoot+Vue):博主个人独立项目,包含详细部署上线视频,已开源
- 学习与生活-专栏:可以了解博主的学习历程
- 算法专栏:算法收录
更多博客与资料可查看👇🏻获取联系方式👇🏻,🍅文末获取开发资源及更多资源博客获取🍅
整理者:长路 时间:2025.2.6