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

相关推荐
Aric_Jones34 分钟前
lua入门语法,包含安装,注释,变量,循环等
java·开发语言·git·elasticsearch·junit·lua
Akiiiira35 分钟前
【日撸 Java 三百行】Day 12(顺序表(二))
java·开发语言
Chase_Mos5 小时前
Spring 必会之微服务篇(1)
java·spring·微服务
小林学习编程7 小时前
SpringBoot校园失物招领信息平台
java·spring boot·后端
撸码到无法自拔7 小时前
docker常见命令
java·spring cloud·docker·容器·eureka
heart000_17 小时前
IDEA 插件推荐:提升编程效率
java·ide·intellij-idea
ŧ榕树先生8 小时前
查看jdk是否安装并且配置成功?(Android studio安装前的准备)
java·jdk
未来的JAVA高级开发工程师8 小时前
适配器模式
java
LUCIAZZZ8 小时前
JVM之内存管理(一)
java·jvm·spring·操作系统·springboot
D_aniel_8 小时前
排序算法-计数排序
java·排序算法·计数排序