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

相关推荐
小羊没烦恼!2 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
俊昭喜喜里2 天前
java中的继承和多态的区别
java
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕2 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码2 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖2 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时2 天前
01-06-A-JVM排查实战详解
java·jvm
vipxieliang2 天前
ValidX 在 DDD 领域驱动设计中的实践
java·spring boot
ba_pi2 天前
mysql 查询所有表名并授权
java
ProcessOn官方账号2 天前
java函数式编程--入门基础
java·编程·函数式编程