Maven高级——分模块设计与开发

目录

​编辑

分模块设计与开发

拆分策略

继承与聚合

版本锁定

聚合

作用

实现

Maven中继承与聚合的联系与区别?

联系

区别

私服


分模块设计与开发

将一个大项目拆分成若干个子模块,方便项目的管理维护,扩展,也方便模块间的相互引用,资源共享。

拆分策略

策略一:按照功能模块拆分,比如:公共组件、商品模块、搜索模块、购物车模块、订单模块等。

策略二:按层拆分,比如:公共组件、实体类、控制层、业务层、数据访问层。

策略三:按照功能模块 + 层拆分。

继承与聚合

继承描述的是两个工程间的关系,与java中的继承相似,子工程可以继承父工程中的配置信息,常见于依赖关系的继承。

第一步:创建父工程,设置打包方式为pom,并继承spring-boot-starter-parent

第二步,在子工程中配置继承关系

在子工程中通过parent标签来设置继承关系,来指定当前这个子工程要继承我们所创建的这个父工程,要指定父工程的坐标,通过relativePath来指定父工程的相对路径,那如果你不指定,默认的是从本地仓库或者远程仓库来查找,一旦设置了继承关系,这个组织的名字也会从父工程商继承下来,所以子工程中配置的groupId是可以省略的

第三步,在父工程中配置各个工程的共有依赖

在子工程中,配置了继承关系后,坐标中的groupId是可以省略的,因为会自动继承父工程。

若父子工程都配置了同一个依赖的不同版本,以子工程为准

版本锁定

在maven中,可以在父工程的pom文件中通过<dependencyManagement>来同意管理依赖版本

<dependencies>是直接依赖,在父工程配置了依赖,子工程会直接继承下来

<dependencyManagement>是统一管理依赖版本,不会直接依赖,还需要在子工程中引入所需依赖(无需指定版本)

聚合

将多个模块组织成一个整体,同时进行项目的构建

聚合工程师一个不具有业务功能的"空"工程,有且仅有一个pom文件。tlias-parent既可以作为父工程,也可以作为聚合工程,通常来说父工程和聚合工程都是同一个工程,

作用

聚合的作用就是快速构建项目,在构建项目的过程中,我们是不需要考虑工程间的依赖关系的,我们直接在这个聚合工程上进行操作就可以了,比如我们要安装,我们直接在聚合工程上安装,那么下面的这些个子模块都会全部的进行安装

实现

在Maven中可以通过<modules>设置当前聚合工程所包含的子模块名称

Maven在执行聚合操作时,会自动的根据模块之间的依赖关系来设置构建的顺序,与我们在聚合工程中所配置的这个模块的顺序是没有关系的

如果我们配置好了聚合关系之后,指定了这个聚合工程要聚合哪些模块之后,在右侧的Maven面板中只会展示这个tlias-parent,紧接着将它展开才会看到他里面聚合的其他模块

接下来我们要进行操作的时候就可以直接在聚合工程里进行操作,0比如要进行clean清理,就直接在聚合工程中进行清理

Maven中继承与聚合的联系与区别?

联系

都属于设计型模块,打包方式都位pom,不用写任何的Java代码,常将两种关系制作到同一个pom文件中

区别

继承可以用来简化依赖的配置,我们可以将子工程上公共的这部分依赖统一的抽取到父工程中,所以可以简化依赖的配置,也可以管理依赖的版本,而在配置继承关系的时候,它不是在父工程商配置,而是在子工程中配置他们之间的继承关系,这是继承

对于聚合来说,它的作用是为了快速构建项目,而不用去处理繁琐的模块之间的依赖关系,而对于这一层聚合关系来说,而它是在父工程上来配置当前这个聚合工程要聚合哪些模块的

私服

相关推荐
圆山猫1 小时前
[Virtualization](四):Linux KVM/RISC-V 的 vCPU 运行路径
java·linux·risc-v
城管不管2 小时前
ReAct、Plan-and-Execute、Reflection 三大智能 Agent 范式核心区别
java·人工智能·算法·spring·ai·动态规划
IT小白杨2 小时前
从环境制备到自动化工作流:多账号运营的工程化架构拆解
java·经验分享·自动化·安全架构·指纹浏览器
豆瓣鸡2 小时前
算法日记 - Day3
java·开发语言·算法
萧瑟余晖3 小时前
Java深入解析篇九之NIO详解
java·网络·nio
The Chosen One9853 小时前
高进度算法模板速记(待完善)
java·前端·算法
极光代码工作室5 小时前
基于SpringBoot的课程预约系统
java·springboot·web开发·后端开发
Leighteen6 小时前
`try-finally` 里的 `return`:为什么 `finally` 会悄悄改掉返回值、吞掉异常
java·开发语言
名字还没想好☜6 小时前
Go 的 time.After 在 select 循环里内存泄漏:定时器堆积原理与 timer.Reset 正确姿势
java·数据库·golang·go·goroutine
圆山猫7 小时前
[Virtualization](三):RISC-V H-extension 与 Guest 执行模式
android·java·risc-v