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

在 Maven 多模块项目中实现“一键打包”,核心是正确配置聚合工程(Aggregator Project),它本身不写业务代码,只负责协调子模块的构建顺序和触发统一打包流程。关键不在“怎么打”,而在于“谁来打、按什么顺序打、打成什么”。
聚合工程必须是 pom 类型
父模块的 必须设为 pom,这是 Maven 识别其为聚合工程的前提。其他类型(如 jar、war)会导致子模块无法被正确纳入构建反应器(Reactor)。
- 删除父模块下的
src目录(它不编译任何源码) - 确保
pom.xml中声明了所有待聚合的子模块路径,例如:
子模块按依赖关系自动排序构建
Maven 的 Reactor 机制会自动分析模块间的 关系,确定安全的构建顺序。比如:order-service 依赖 common-utils,Maven 就会先构建 common-utils,再构建 order-service。
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
- 无需手动写构建脚本控制顺序,只要依赖声明正确,
mvn clean package就能自动完成拓扑排序 - 可运行
mvn reactor:sort查看实际构建顺序(调试时有用) - 避免循环依赖——这是导致构建失败的最常见原因
打包行为由子模块各自决定
聚合工程本身不生成任何可执行产物,真正的打包动作发生在每个子模块内部。每个子模块的 类型决定了它产出什么:
-
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跳过测试(上线前建议保留测试) - 所有子模块的构建日志会连续输出,失败时会中断并提示具体哪个模块出错










