在 Maven 多模块项目中实现“一键打包”,核心是配置 packaging 为 pom 的聚合工程,通过 声明子模块,由 Reactor 自动按依赖拓扑排序构建,各子模块依自身 类型生成对应产物,最终在根目录执行 mvn clean package 即可完成全流程。

在 Maven 多模块项目中实现“一键打包”,核心是正确配置聚合工程(Aggregator Project),它本身不写业务代码,只负责协调子模块的构建顺序和触发统一打包流程。关键不在“怎么打”,而在于“谁来打、按什么顺序打、打成什么”。
聚合工程必须是 pom 类型
父模块的 <packaging></packaging> 必须设为 pom,这是 Maven 识别其为聚合工程的前提。其他类型(如 jar、war)会导致子模块无法被正确纳入构建反应器(Reactor)。
- 删除父模块下的
src目录(它不编译任何源码) - 确保
pom.xml中声明了所有待聚合的子模块路径,例如:
子模块按依赖关系自动排序构建
Maven 的 Reactor 机制会自动分析模块间的 <dependency></dependency> 关系,确定安全的构建顺序。比如:order-service 依赖 common-utils,Maven 就会先构建 common-utils,再构建 order-service。
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- 无需手动写构建脚本控制顺序,只要依赖声明正确,
mvn clean package就能自动完成拓扑排序 - 可运行
mvn reactor:sort查看实际构建顺序(调试时有用) - 避免循环依赖——这是导致构建失败的最常见原因
打包行为由子模块各自决定
聚合工程本身不生成任何可执行产物,真正的打包动作发生在每个子模块内部。每个子模块的 <packaging></packaging> 类型决定了它产出什么:
-
jar:普通 Java 模块(如 service、utils),产出xxx.jar -
war:Web 模块,产出xxx.war -
pom:仅用于管理(如 BOM 模块),不产出二进制文件 - 若需最终合并为一个可运行包(如含所有依赖的 fat jar),应在**启动模块**(如主 Web 模块)中单独配置
spring-boot-maven-plugin或maven-assembly-plugin
执行一键打包命令
在聚合工程根目录下运行:
mvn clean package -Dmaven.test.skip=true-
clean清除旧产物,避免干扰 -
package触发整个 Reactor 构建链 -
-Dmaven.test.skip=true跳过测试(上线前建议保留测试) - 所有子模块的构建日志会连续输出,失败时会中断并提示具体哪个模块出错

















