You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多模块Spring Boot项目如何为所有模块输出jar添加时间戳后缀

多模块Spring Boot项目Jar包统一添加时间戳后缀配置方案

核心问题原因

直接在单个模块配置maven.build.timestamp和finalName失效,本质是两个问题:

  • 父POM未做统一配置,子模块没有继承统一的命名规则,模块间依赖解析时会出现文件名不匹配的构建错误
  • Spring Boot打包插件默认会覆盖普通Maven Jar插件的命名规则,未做插件配置同步时,可执行Jar模块的命名不会生效

正确配置方案

第一步:修改父聚合POM全局配置

所有公共配置全部放在父POM中,子模块直接继承,无需重复配置。

  1. 在properties节点定义时间戳格式和版本前缀,匹配你需要的E-Version-1.0.001-06-15-2022-09-32.jar命名格式
  2. 在build节点定义全局finalName规则
  3. 通过pluginManagement统一配置Maven Jar插件和Spring Boot打包插件的命名规则,避免插件覆盖文件名

父POM核心配置片段:

<properties>
    <java.version>1.8</java.version>
    <!-- 时间戳格式对应示例中的月-日-年-时-分 -->
    <maven.build.timestamp.format>MM-dd-yyyy-HH-mm</maven.build.timestamp.format>
    <!-- 自定义Jar包前缀,可根据实际版本调整 -->
    <jar.name.prefix>E-Version-1.0.001</jar.name.prefix>
</properties>

<build>
    <!-- 全局统一Jar包命名规则,所有子模块自动继承 -->
    <finalName>${jar.name.prefix}-${maven.build.timestamp}</finalName>
    <pluginManagement>
        <plugins>
            <!-- 普通Jar模块打包规则 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <finalName>${project.build.finalName}</finalName>
                </configuration>
            </plugin>
            <!-- Spring Boot可执行Jar模块打包规则,避免命名被覆盖 -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <finalName>${project.build.finalName}</finalName>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

父POM的packaging类型为pom,本身不会产出Jar包,上述配置会自动向下传递给所有子模块。

第二步:调整子模块配置

  • model、repository、service-api、service-impl四个普通Jar模块:不需要添加任何build相关配置,直接继承父POM规则即可。
  • application可执行Jar模块:仅保留Spring Boot插件声明即可,不需要额外配置finalName,插件会自动读取全局命名规则,配置如下:
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

第三步:执行构建

在项目根目录执行构建命令:
mvn clean package
构建完成后,所有子模块target目录下的Jar包都会统一为指定的带时间戳后缀格式,且所有模块使用同一构建时间戳,不会出现命名不一致问题。


避坑说明

  • 不要在子模块中单独重写finalName或maven.build.timestamp.format配置,否则会覆盖全局规则导致模块间依赖解析失败。
  • 如需调整命名格式、版本前缀,仅修改父POMproperties节点中的对应值即可,所有模块同步生效。
  • 不需要引入额外的时间戳生成插件,使用Maven内置的maven.build.timestamp属性即可满足需求,减少配置复杂度。

内容的提问来源于stack exchange,提问作者Cobra Commander

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 01:12:45