目录
一、分模块设计与开发
1、为什么要分模块设计?
2、实践:分模块开发
①、实现步骤
3、小结
二、继承与聚合
继承
1、继承关系
①、为什么要在Maven工程中实现继承?
②、继承关系实现
③、继承实现小结
④、maven项目父子工程结构说明
2、版本锁定
①、什么是版本锁定 & 为什么进行版本锁定?--(统一管理依赖的版本号)
②、自定义属性/引用属性
③、思考: 与 的区别是什么?
聚合
1、为什么要聚合?
2、聚合功能的实现
3、小结(继承与聚合的异同点)
三、私服
1、介绍
2、资源上传与下载
①、仓库介绍(2种类型)
②、资源上传与下载实现
③、本地私服
④、小结
一、分模块设计与开发
1、为什么要分模块设计?
如果不进行分模块设计,会导致项目不便维护、难以复用
所以,答案就在眼前,我们要对项目进行分模块设计:(这样更加便于项目的维护和管理)
2、实践:分模块开发
①、实现步骤
示例:
Ⅰ、正常创建一个Maven模块即可,创建tlias-pojo: |
Ⅱ、将之前案例中的pojo的所有代码复制到tlias-pojo模块中:(如有报错,需要自行修改、引入依赖) |
Ⅲ、在拆分的原项目tlias-web-management中的pom.xml文件中引入tlias-pojo依赖: |
Ⅳ、创建tlias-utils模块: |
Ⅴ、拷贝utils文件到tlias-utils模块,并引入对应依赖(JWT): |
Ⅵ、在原项目tlias-web-management中的pom.xml文件中引入tlias-utils依赖: |
3、小结
二、继承与聚合
继承
1、继承关系
Maven工程之间也可以实现继承关系
示例:(所有的SpringBoot工程都有一个统一的父工程:Spring-boot-starter-parent)
①、为什么要在Maven工程中实现继承?
如上图所示,在上一节中,我们将项目分成了三个模块,但三个模块都共同使用了 lombok 这个依赖,后面随着项目开发的逐渐复杂,重复的依赖会越来越多,Maven的继承就是来解决这个问题的。
②、继承关系实现
在Maven当中,一个工程只能继承一个父工程,正如类与类之间只能单继承,但支持多重继承,即 A继承B,B继承C
示例:
Ⅰ、创建父工程模块 tlias-parent: |
Ⅱ、tlias-parent的打包方式设置为pom,并指定继承: |
由于tlias-parent是作为一个父工程来使用的,所以里面不会写任何的Java代码,所以模块中的src文件可以直接删掉: |
Ⅲ、在子工程tlias-web-management中指定继承: |
Ⅳ、在 tlias-pojo 以及 tlias-utils 中添加一样的父继承指定: |
Ⅴ、在父工程(tlias-parent)中配置各个模块共有的依赖:(如 lombok) |
③、继承实现小结
Ⅰ、创建Maven模块tlias-parent,该工程为父工程,设置打包方式pom:
Ⅱ、在子工程的pom.xml文件中,配置继承关系:
Ⅲ、在父工程中配置各个工程共有的依赖(子工程会自动继承父工程的依赖)
一般情况下,如果我们在父工程中配置了这个依赖,那么我们在子工程中就不用再配置这个依赖了
④、maven项目父子工程结构说明
两种都可以使用,只是第二种会显得更加清晰:
2、版本锁定
①、什么是版本锁定 & 为什么进行版本锁定?--(统一管理依赖的版本号)
共有依赖可以定义在父工程中,但并不是所有的依赖都是共有的,有的依赖是某个模块所独有的,那么我们就需要在这个模块中单独引入该依赖,并且,我们还要保证这些模块的依赖版本一致:解决这个问题的方法就是版本锁定。
示例:(我们可以在父工程中对JWT依赖使用<dependencyManagement>进行依赖版本的管理)
注意:在父工程中的<dependencyManagement>标签中进行版本号管理的依赖并不会被子工程自动引入,在子工程中还是需要手动引入这个依赖才行,只不过无需再指定版本号了。
②、自定义属性/引用属性
在<propeties>标签中可以自定义属性标签,我们可以利用这个功能来进行版本号的统一管理:
示例:
③、思考:<dependcyManagement> 与 <dependencies> 的区别是什么?
聚合
1、为什么要聚合?
对模块的打包过程:
在上一个例子中,如果我们在tlias-web-management模块中进行package操作,会出现以下错误:BUILD FAILURE |
这是由于我们没有安装 tlias-pojo 以及 tlias-utils 这两个模块,我们可以对其进行 install 操作: |
之后,我们再对tlias-web-management模块中进行package操作,结果还是 BUILD FAILURE |
报错:找不到tlias-parent,我们对这个父工程tlias-parent也进行install操作,此时再对tlias-web-management模块中进行package操作,即可 BUILD SUCCESS |
从上面的操作,我们可以看出,我们通过普通的方式来对一个分模块的项目进行打包,过程变得过于麻烦,我们对主项目进行打包,需要分别将其它模块进行 install 才行,而 Maven 的聚合功能就是要解决这个问题的,让你轻松一键构建项目编译,一键打包,一键安装等等。
2、聚合功能的实现
示例:
Ⅰ、在tlias-parent的pom文件中聚合其它模块: |
Ⅱ、以对tlias-parent生命周期的clean操作为例: |
聚合之后,所有模块都会执行该操作 |
3、小结(继承与聚合的异同点)
三、私服
1、介绍
原因:Maven的中央仓库,需要联网,全球唯一,且由maven官方维护,那么要想解决团队资源共享问题:我们可以搭建私服
在正常开发中,我们只要学会如何在私服中上传jar包,以及如何从私服中下载依赖即可
2、资源上传与下载
①、仓库介绍(2种类型)
该仓库存储的就是从中央仓库中下载下来的jar包 |
而下面的两个仓库,存放的都是项目组内部共享的资源 |
两个仓库的原因和项目版本有关: |
②、资源上传与下载实现
将自己写的模块打成jar包上传到私服:
(1)设置私服的访问用户名/密码(settings.xml中的servers中配置) (2)IDEA的maven工程的pom文件中配置上传(发布)地址:
(3)设置私服依赖下载的仓库组地址(settings.xml中的mirrors、profiles中配置)
在项目中的pom.xml文件添加以下内容:
|
具体内容可以参考私服配置文档:
对项目执行deploy:
执行结果:
新打开一个maven项目,测试是否可以将上传到私服的jar包下载下来:
|