maven父子工程多模块如何管理统一的版本号?

1.为什么要统一管理?

maven父子工程多模块,每个模块还都可以独立存在,子模块往往通常希望和父工程保持一样的版本,如果每个工程单独定义版本号,后期变更打包也非常麻烦,如何维护一个全局的版本号呢?

2.如何解决呢?

复制代码
Maven官方文档说:自 Maven 3.5.0-beta-1 开始,可以使用 ${revision}, ${sha1} and/or ${changelist} 这样的变量作为版本占位符。

即在maven多模块项目中,可配合插件flatten-maven-plugin${revision}属性来实现全局版本统一管理。

父工程

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-parent</artifactId>
        <version>2.7.18</version>
    </parent>
    <groupId>com.xxx.project</groupId>
    <artifactId>xxx-parent</artifactId>
    <packaging>pom</packaging>
    <version>${revision}</version>
    <modules>
        <module>module1</module>
        <module>module2</module>
        <module>module3</module>
    </modules>

    <properties>
        <!-- globe version,if you can update the version for all project -->
        <revision>1.1.1</revision>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <build>
        <plugins>
            <!-- 添加flatten-maven-plugin插件 -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>flatten-maven-plugin</artifactId>
                <version>1.3.0</version>
                <inherited>true</inherited>
                <executions>
                    <execution>
                        <id>flatten</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>flatten</goal>
                        </goals>
                        <configuration>
                            <updatePomFile>true</updatePomFile>
                            <flattenMode>resolveCiFriendliesOnly</flattenMode>
                            <pomElements>
                                <parent>expand</parent>
                                <distributionManagement>remove</distributionManagement>
                                <repositories>remove</repositories>
                            </pomElements>
                        </configuration>
                    </execution>
                    <execution>
                        <id>flatten.clean</id>
                        <phase>clean</phase>
                        <goals>
                            <goal>clean</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

子模块

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>xxx-parent</artifactId>
        <groupId>com.xxx.project</groupId>
        <version>${revision}</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>module3</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>

        <dependency>
            <groupId>com.xxx.project</groupId>
            <artifactId>module1</artifactId>
            <version>${revision}</version>
        </dependency>
    </dependencies>


</project>

编译

复制代码
mvn clean package

基于以上操作,每次版本号变更,只需要修改父模块POM文件中的revision即可

3.引用

相关推荐
ltl2 分钟前
Layer Normalization:为什么 Transformer 用 LN,不用 BN
后端
SunnyDays10116 分钟前
Java 读写 Excel 公式:从基础到高级的实战总结
java·开发语言·excel
wb043072017 分钟前
Java 26
java·开发语言
ltl10 分钟前
title: 【Transformer 与注意力机制】24|
后端
白露与泡影11 分钟前
JVM GC调优实战:从线上频繁Full GC到RT降低80%的全过程
java·开发语言·jvm
范什么特西13 分钟前
Spring 动态代理 静态代理
java·后端·spring
醇氧13 分钟前
Spring 动态注册 Bean 深度解析:从源码到实践
java·后端·spring
zb2006412016 分钟前
Laravel7.x十大核心特性解析
spring boot·后端·laravel
明月_清风1 小时前
FastAPI 从入门到实战:3 分钟构建高性能异步 API
后端·python·fastapi
小村儿1 小时前
连载10-Sub-agents 深度解析:从源码理解 Claude Code 的分身术
前端·后端·ai编程