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

相关推荐
Theodore_10224 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
冰帝海岸5 小时前
01-spring security认证笔记
java·笔记·spring
世间万物皆对象5 小时前
Spring Boot核心概念:日志管理
java·spring boot·单元测试
没书读了6 小时前
ssm框架-spring-spring声明式事务
java·数据库·spring
小二·6 小时前
java基础面试题笔记(基础篇)
java·笔记·python
开心工作室_kaic6 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
懒洋洋大魔王6 小时前
RocketMQ的使⽤
java·rocketmq·java-rocketmq
武子康6 小时前
Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据仓库·sql·mybatis·springboot·springcloud
转世成为计算机大神7 小时前
易考八股文之Java中的设计模式?
java·开发语言·设计模式
qq_327342737 小时前
Java实现离线身份证号码OCR识别
java·开发语言