讲师中心 微信公众号
AI工具推荐 视频效率加速

如何部署多模块 Spring Boot Maven 项目?

酷雪吖_7551

酷雪吖_7551

发布时间:2026-02-09 10:34:02

|

1321人浏览过

|

来源于php中文网

原创

如何部署多模块 Spring Boot Maven 项目?

本文详解多模块 spring boot 项目的正确构建与独立部署策略,涵盖模块间依赖处理、各模块独立启动(不同端口)、生成多个可执行 jar 包,以及在 aws 等云平台上的主流部署方案。

在典型的多模块 Spring Boot 项目中(如 Module-A、Module-B、Module-C),每个子模块均标注 @SpringBootApplication 并配置独立端口(如 8080/8200/8300),且存在显式依赖关系(例如 Module-B 依赖 Module-A),这本质上是多个逻辑解耦的微服务应用,而非单体聚合应用。因此,不应也不可打包为“一个 JAR 并同时启动所有主类”——Spring Boot 不支持单个 JVM 中并行运行多个 SpringApplication.run() 实例(会引发端口冲突、上下文重名、Bean 注册冲突等严重问题)。

✅ 正确构建方式:模块化打包,各自为政

父 POM(Main-Module/pom.xml)应声明为 <packaging>pom</package>,并使用 <modules> 显式声明子模块:

<!-- Main-Module/pom.xml -->
<packaging>pom</packaging>
<modules>
    <module>Module-A</module>
    <module>Module-B</module>
    <module>Module-C</module>
</modules>

各子模块(如 Module-B)需继承父 POM,并显式声明 spring-boot-starter-parent 作为 parent 或通过 <dependencyManagement> 统一版本,同时添加 spring-boot-maven-plugin:

<!-- Module-B/pom.xml -->
<parent>
    <groupId>com.example</groupId>
    <artifactId>Main-Module</artifactId>
    <version>1.0.0</version>
</parent>
<artifactId>Module-B</artifactId>
<packaging>jar</packaging>

<dependencies>
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>Module-A</artifactId>
        <version>${project.version}</version> <!-- 注意:依赖同版本的 Module-A -->
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

执行 mvn clean package 后,将在各子模块的 target/ 目录下生成三个独立的可执行 JAR 文件(如 Module-A-1.0.0.jar、Module-B-1.0.0.jar、Module-C-1.0.0.jar),每个均可通过 java -jar 单独启动:

Openclaw Talk Analyzer
Openclaw Talk Analyzer

基于 AI 的对话分析工具,自动提取会议要点、销售异议、客户满意度、行动项及策略建议,支持多场景应用。

下载
# 分别启动(确保端口不冲突)
java -jar Module-A/target/Module-A-1.0.0.jar  # 默认或配置端口 8080
java -jar Module-B/target/Module-B-1.0.0.jar  # 配置端口 8200
java -jar Module-C/target/Module-C-1.0.0.jar  # 配置端口 8300
⚠️ 关键注意事项: 禁止在父模块中添加 spring-boot-maven-plugin —— 否则会导致构建失败或生成空/无效包;插件必须置于每个含 @SpringBootApplication 的子模块中。 子模块间依赖应使用 <scope>compile</scope>(默认),避免 provided 或 test 导致运行时类缺失。 各模块的 application.yml/application.properties 必须独立配置 server.port,推荐通过 application-{profile}.yml + 激活 profile 实现环境隔离。

☁️ 云平台部署推荐方案(以 AWS 为例)

由于是多个独立服务,部署必须按服务粒度进行,而非整体打包。AWS 提供多种成熟路径:

方案 适用场景 关键优势 参考文档
AWS Fargate (ECS) 推荐首选。容器化部署,免运维集群 无需管理 EC2 实例;自动扩缩容;天然支持多服务隔离与网络通信 Deploy Java Microservices on ECS with Fargate
Elastic Beanstalk 快速验证、CI/CD 初期 托管 Tomcat/Java SE 运行时;一键部署单个 JAR;支持负载均衡与健康检查 Deploy Spring Boot on Elastic Beanstalk
EC2 自托管 需完全控制 OS/网络/安全策略 灵活性最高;可配合 systemd 管理多进程(如 systemd service files 分别守护各 JAR) 需自行编写部署脚本与监控

? 实践提示:无论选择哪种云方案,务必为每个模块构建独立的部署单元(Fargate Task Definition、EB Application Version、EC2 Systemd Service)。切勿尝试将三个 JAR 打包进同一容器或同一 EB 应用——这违背微服务设计原则,且极易引发端口、日志、配置混乱。

✅ 总结

  • 多 @SpringBootApplication 子模块 = 多个独立 Spring Boot 应用,必须分别构建、分别部署、分别运行;
  • 父 POM 仅作依赖/版本协调,子模块各自启用 spring-boot-maven-plugin 生成可执行 JAR;
  • 云部署应基于服务维度选型:Fargate 适合生产级容器编排,Elastic Beanstalk 适合快速上手,EC2 适合深度定制;
  • 始终遵循 “Single Responsibility” 原则——一个 JAR,一个进程,一个端口,一个职责。

遵循此范式,即可稳健支撑从本地开发到云上生产的全链路多模块 Spring Boot 微服务部署。

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

相关专题

更多
如何配置Tomcat环境变量
如何配置Tomcat环境变量

配置Tomcat环境变量需要在系统中添加CATALINA_HOME变量,并将Tomcat的安装路径添加到PATH变量中。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

665

2023.10.26

idea如何集成Tomcat
idea如何集成Tomcat

idea集成Tomcat的步骤:1、添加Tomcat服务器配置;2、配置项目部署;3、运行Tomcat服务器;4、访问项目;5、注意事项;6、关闭Tomcat服务器。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

284

2024.02.23

怎么查看Tomcat源代码
怎么查看Tomcat源代码

查看Tomcat源代码的步骤:1、下载Tomcat源代码;2、在IDEA中导入Tomcat源代码;3、查看源代码;4、理解Tomcat的工作原理;5、参与社区和贡献;6、注意事项;7、持续学习和更新;8、使用工具和插件。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

469

2024.02.23

常见的tomcat漏洞有哪些
常见的tomcat漏洞有哪些

常见的tomcat漏洞有:1、跨站脚本攻击;2、跨站请求伪造;3、目录遍历漏洞;4、缓冲区溢出漏洞;5、配置漏洞;6、第三方组件漏洞。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

265

2024.02.23

tomcat日志乱码怎么解决
tomcat日志乱码怎么解决

tomcat日志乱码的解决办法:1、修改tomcat的日志编码设置;2、检查ide的编码设置;3、检查操作系统的编码设置;4、使用过滤器处理日志;5、检查外部系统的编码设置;6、检查文件编码方式等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

328

2024.02.23

weblogic和tomcat有哪些区别
weblogic和tomcat有哪些区别

weblogic和tomcat的区别:1、功能;2、性能;3、规模;4、价格;5、安全性;6、配置和管理;7、社区支持;8、集成能力;9、升级和更新;10、可靠性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

329

2024.02.23

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

541

2024.02.23

tomcat启动闪退怎么解决
tomcat启动闪退怎么解决

tomcat启动闪退的解决办法:1、检查java环境;2、检查环境变量配置;3、检查端口被占用;4、检查配置文件编码;5、检查启动时需要的配置文件;6、检查相关文件是否丢失;7、检查防火墙和杀毒软件设置。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

302

2024.02.23

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

0

2026.09.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn