Maven通过flatten-maven-plugin插件实现多模块版本统一管理

正文

起因是公司开始推代码版本管理的相关制度,而开发过程中经常使用多模块构建项目,每次做版本管理时都需要对每个模块及子模块下的pom文件中parent.version和模块下依赖中的version进行修改,改的地方非常多,且非常容易漏。为此就上网查询有没有对应的简便的方法,最开始在顶层模块pom中使用<properties>指定版本进行依赖下的模块版本控制,但是通过这种方法没办法修改parent.version会出现这种bug。

最后上网搜索知道Maven从3.5.0-beta-1开始就支持${revision}, ${sha1} 和/或 ${changelist} 来作为占位符,并给出对应的解决方案,详情可查看官网链接

从官网中得知可以配合flatten-maven-plugin插件来实现maven构建,这一点在官网中也有体现

xml 复制代码
<project>
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.apache</groupId>
    <artifactId>apache</artifactId>
    <version>18</version>
  </parent>
  <groupId>org.apache.maven.ci</groupId>
  <artifactId>ci-parent</artifactId>
  <name>First CI Friendly</name>
  <version>${revision}</version>
  ...
  <properties>
    <revision>1.0.0-SNAPSHOT</revision>
  </properties>

 <build>
  <plugins>
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>flatten-maven-plugin</artifactId>
      <version>1.1.0</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>
  <modules>
    <module>child1</module>
    ..
  </modules>
</project>

使用这套插件和使用方法后每个模块会多出.flattened-pom.xml这个文件,如果使用git进行管理,避免将文件上传至git库,可以在.gitignore文件下加上该文件名称

复制代码
# 依赖版本配置文件
.flattened-pom.xml

子模块中如果引用其他子模块依赖,则依赖中的version必须使用${project.version}来保证依赖版本和当前模块版本一致,如果使用${revision}会出现编译失败。

最后结果是这样

参考文章

https://blog.csdn.net/changqing5818/article/details/131196288
https://maven.apache.org/maven-ci-friendly.html

相关推荐
都叫我大帅哥1 天前
Java JJWT 完全指南:从入门到生产级实践
java
前端开发张小七1 天前
Java 学习笔记 · 第一课:基础语法与核心概念
java·后端
ThsPool1 天前
【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发
java·前端·javascript
赤壁小虾1 天前
【渲染流水线】[逐片元阶段]-[透明度测试]以UnityURP为例
java·前端·数据库
青山木1 天前
Hot 100 --- 搜索插入位置
java·数据结构·算法·leetcode
Jul1en_1 天前
【Claude Code Compact】源码级别的学习上下文压缩
java·前端·学习·github·ai编程
摇滚侠1 天前
《SpringBoot 3:入门与应用实战》第 15 章 生产级特性 管理 Spring Boot 应用 阅读笔记
java·spring boot·笔记
XWalnut1 天前
SpringBoot快速入门
java·spring boot·后端
前端 贾公子1 天前
第06章:结构化输出 (上)
java·服务器·前端
念何架构之路1 天前
restartmanager-重启管理子系统
java·开发语言