当前位置: 首页 > news >正文

springBoot不同module之间互相依赖

在 Spring Boot 多模块项目中,不同模块之间的依赖通常是通过 Maven 或 Gradle 来管理的。以下是一个示例结构和如何设置这些依赖的示例。

项目结构

假设我们有一个多模块的 Spring Boot 项目,结构如下:

my-springboot-project
│
├── pom.xml                  // 父 POM 文件
├── module-a
│   ├── pom.xml              // Module A 的 POM 文件
│   └── src
│       └── main
│           └── java
│               └── com.example.modulea
│                   └── ModuleAApplication.java
│
├── module-b
│   ├── pom.xml              // Module B 的 POM 文件
│   └── src
│       └── main
│           └── java
│               └── com.example.moduleb
│                   └── ModuleBApplication.java
│
└── module-c├── pom.xml              // Module C 的 POM 文件└── src└── main└── java└── com.example.modulec└── ModuleCApplication.java

父 POM 文件(my-springboot-project/pom.xml)

在父 POM 文件中,定义所有子模块和共有的依赖。

<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><groupId>com.example</groupId><artifactId>my-springboot-project</artifactId><version>1.0.0</version><packaging>pom</packaging><modules><module>module-a</module><module>module-b</module><module>module-c</module></modules><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.7.0</version><type>pom</type><scope>import</scope></dependency><!-- 其他共有的依赖 --></dependencies></dependencyManagement><build><pluginManagement><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></pluginManagement></build>
</project>

模块 A 的 POM 文件(module-a/pom.xml)

<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>com.example</groupId><artifactId>my-springboot-project</artifactId><version>1.0.0</version></parent><artifactId>module-a</artifactId><dependencies><!-- 依赖于 Spring Boot 和其他公共库 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency></dependencies>
</project>

模块 B 的 POM 文件(module-b/pom.xml)

模块 B 依赖于模块 A,因此在它的 POM 文件中要添加对模块 A 的依赖。

<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://www.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.example</groupId><artifactId>my-springboot-project</artifactId><version>1.0.0</version></parent><artifactId>module-b</artifactId><dependencies><dependency><groupId>com.example</groupId><artifactId>module-a</artifactId><version>1.0.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency></dependencies>
</project>

模块 C 的 POM 文件(module-c/pom.xml)

模块 C 也可以依赖于其他模块,如模块 A 和 B。

<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://www.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.example</groupId><artifactId>my-springboot-project</artifactId><version>1.0.0</version></parent><artifactId>module-c</artifactId><dependencies><dependency><groupId>com.example</groupId><artifactId>module-a</artifactId><version>1.0.0</version></dependency><dependency><groupId>com.example</groupId><artifactId>module-b</artifactId><version>1.0.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency></dependencies>
</project>

依赖解析

  • 父 POM 文件:定义了所有模块的公共依赖和配置。
  • 子模块 POM 文件:继承自父 POM 文件,可以定义特定于该模块的依赖,并可以依赖其他模块。

通过这种方式,每个模块可以独立开发、测试和运行,但仍然可以共享公共配置和依赖,从而减少重复代码和配置。

相关文章:

  • 前字节员工自爆:我原腾讯一哥们,跳槽去小公司做小领导,就签了竞业,又从小公司离职去了对手公司,结果被发现了,小公司要他赔80万
  • 鸿蒙HarmonyOS实战:渲染控制、路由案例
  • C语言—数据在内存中的存储
  • shadertoy-安装和使用
  • hbase安装部署
  • 打开nginx连接的php页面报错502
  • 实验室自用LabVIEW软件与商用软件价格差异分析
  • C#语言进阶(二)—事件全解
  • 8086汇编 add指令学习
  • 用研究的眼光解读如何基于UVM搭建验证平台《UVM实战》(可下载)
  • 免费Syslog日志接收工具
  • 香港电讯高可用网络助力企业变革金融计算
  • python实现进度条的方法和实现代码
  • 【漏洞复现】契约锁电子签章平台 add 远程命令执行漏洞(XVE-2023-23720)
  • 【代码随想录算法训练Day43】LeetCode 518.零钱兑换II、LeetCode 377.组合总和IV、LeetCode 70.爬楼梯
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 【css3】浏览器内核及其兼容性
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • E-HPC支持多队列管理和自动伸缩
  • Fabric架构演变之路
  • js面向对象
  • js中forEach回调同异步问题
  • React as a UI Runtime(五、列表)
  • Ruby 2.x 源代码分析:扩展 概述
  • SpiderData 2019年2月23日 DApp数据排行榜
  • VUE es6技巧写法(持续更新中~~~)
  • win10下安装mysql5.7
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • #考研#计算机文化知识1(局域网及网络互联)
  • #每日一题合集#牛客JZ23-JZ33
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (6)设计一个TimeMap
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (二)WCF的Binding模型
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • .net 7和core版 SignalR
  • .NET 表达式计算:Expression Evaluator
  • .net 流——流的类型体系简单介绍
  • .net 使用ajax控件后如何调用前端脚本
  • .net 微服务 服务保护 自动重试 Polly
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)