目录
Maven高级
分模块设计与开发
1.
创建
maven
模块
tlias-pojo
,存放实体类
A.
创建一个正常的
Maven
模块,模块名
tlias-pojo
B.
然后在
tlias-pojo
中创建一个包
com.itheima.pojo (
和原来案例项目中的
pojo
包名一致
)
为什么包名com.itheima.pojo?
SpringBoot项目中的 @SpringBootApplication 注解,具有包扫描的作用,但是它只会扫描启
动类所在的当前包以及子包。
• 当前包: com.itheima , 第三方依赖中提供的包: com.example ( 扫描不到 )
C.
将原来案例项目
tlias-web-management
中的
pojo
包下的实体类,复制到
tlias-pojo
模块中
D.
在
tlias-pojo
模块的
pom.xml
文件中引入依赖
E.
删除原有案例项目
tlias-web-management
的
pojo
包【直接删除不要犹豫,我们已经将该模块拆
分出去了】,然后在
pom.xml
中引入
tlias-pojo
的依赖
2.
创建
Maven
模块
tlias-utils
,存放相关工具类
A.
创建一个正常的
Maven
模块,模块名
tlias-utils
B.
然后在
tlias-utils
中创建一个包
com.itheima.utils (
和原来案例项目中的
utils
包名
一致
)
C.
将原来案例项目
tlias-web-management
中的
utils
包下的实体类,复制到
tlias-utils
模
块中
D.
在
tlias-utils
模块的
pom.xml
文件中引入依赖
E.
删除原有案例项目
tlias-web-management
的
utils
包【直接删除不要犹豫,我们已经将该模块
拆分出去了】,然后在
pom.xml
中引入
tlias-utils
的依赖
到此呢,就已经完成了模块的拆分,拆分出了
tlias-pojo
、
tlias-utils
、
tlias-web
management
,如果其他项目中需要用到
pojo
,或者
utils
工具类,就可以直接引入依赖。
继承与聚合
在案例项目分模块开发之后啊,我们会看到
tlias-pojo
、
tlias-utils
、
tlias-web-management
中都引入了一个依赖
lombok
的依赖。我们在三个模块中分别配置了一次。
如果是做一个大型的项目,这三个模块当中重复的依赖可能会很多很多。如果每一个
Maven
模块里面,我们都来单独的配置一次,功能虽然能实现,但是配置是比较繁琐
的。
继承
我们可以再创建一个父工程
tlias-parent
,然后让上述的三个模块
tlias-pojo
、
tlias-utils、
tlias-web-management
都来继承这个父工程 。 然后再将各个模块中都共有的依赖,都提取到父工程 tlias-parent
中进行配置,只要子工程继承了父工程,依赖它也会继承下来,这样就无需在各个子工程中进行配置了。
继承关系
版本锁定
如果项目中各个模块中都公共的这部分依赖,我们可以直接定义在父工程中,从而简化子工程的配置。然而在项目开发中,还有一部分依赖,并不是各个模块都共有的,可能只是其中的一小部分模块中使用到了这个依赖。
比如:在
tlias-web-management
、
tlias-web-system
、
tlias-web-report
这三个子工程中,
都使用到了
jwt
的依赖。 但是
tlias-pojo
、
tlias-utils
中并不需要这个依赖,那此时,这个依
赖,我们不会直接配置在父工程
tlias-parent
中,而是哪个模块需要,就在哪个模块中配置。
而由于是一个项目中的多个模块,那多个模块中,我们要使用的同一个依赖的版本要一致,这样便于项目依赖的统一管理。比如:这个jwt
依赖,我们都使用的是
0.9.1
这个版本。
那假如说,我们项目要升级,要使用到
jwt
最新版本
0.9.2
中的一个新功能,那此时需要将依赖的版
本升级到
0.9.2
,那此时该怎么做呢 ?
第一步:去找当前项目中所有的模块的
pom.xml
配置文件,看哪些模块用到了
jwt
的依赖。
第二步:找到这个依赖之后,将其版本
version
,更换为
0.9.2
。
问题:如果项目拆分的模块比较多,每一次更换版本,我们都得找到这个项目中的每一个模块,一个一
个的更改。 很容易就会出现,遗漏掉一个模块,忘记更换版本的情况。
那我们又该如何来解决这个问题,如何来统一管理各个依赖的版本呢?
答案:
Maven的版本锁定功能。
属性配置
我们也可以通过自定义属性及属性引用的形式,在父工程中将依赖的版本号进行集中管理维护。 具体语法为:
聚合
私服
场景
前面我们在讲解多模块开发的时候,我们讲到我们所拆分的模块是可以在同一个公司各个项目组之间进行
资源共享
的。这个模块的资源共享,就需要通过我们接下来所讲解的 Maven
的私服来实现。
在介绍什么是私服之前,我们先来分析一下同一个公司,两个项目组之间如何基于私服进行资源的共享。
假设现在有两个团队,
A
和
B
。
A
开发了一个模块
tlias-utils
,模块开发完毕之后,将模块打
成
jar
包,并安装到了
A
的本地仓库。
那此时,该公司的
B
团队开发项目时,要想使用
tlias-utils
中提供的工具类,该怎么办呢? 对于
maven
项目来说,是不是在
pom.xml
文件中引入
tlias-utils
的坐标就可以了呢?
大家可以思考一下,当
B
团队在
maven
项目的
pom.xml
配置文件中引入了依赖的坐标之后,
maven
是如何查找这个依赖的? 查找顺序为:
1).
本地仓库:本地仓库中是没有这个依赖
jar
包的。
2).
远程中央仓库:由于该模块时自己公司开发的,远程仓库中也没有这个依赖
因为目前
tlias-utils
这个依赖,还在
A
的本地仓库中的。
B
电脑上的
maven
项目,是不可能找得到
A
电脑上
maven
本地仓库的
jar
包的。 那此时,大家可能会有一个想法:因为
A
和
B
都会连接中央仓库, 我们可以将A
本地仓库的
jar
包,直接上传到中央仓库,然后
B
从中央仓库中下载
tlias-utils
这个依赖。

这个想法很美好,但是现实很残酷。这个方案是行不通的,因为中央仓库全球只有一个,不是什么人都可以往中央仓库中来上传jar
包的,我们是没有权限操作的。
那此时,
maven
的私服就出场了,私服其实就是架设在公司局域网内部的一台服务器,就是一种特殊的远程仓库。
有了私服之后,各个团队就可以直接来连接私服了。
A
连接上私服之后,他就可以把
jar
包直接上传到私服当中。我公司自己内部搭建的服务器,我是不是有权限操作呀,把jar
包上传到私服之后,我让B 团队的所有开发人员也连接同一台私服。连接上这一台私服之后,他就会根据坐标的信息,直接从私服当中将对应的jar
包下载到自己的本地仓库,这样就可以使用到依赖当中所提供的一些工具类了。这样我们就可以通过私服来完成资源的共享。
而如果我们在项目中需要使用
其他第三方提供的依赖,如果本地仓库没有,也会自动连接私服下载,如果私服没有,私服此时会自动连接中央仓库,去中央仓库中下载依赖,然后将下载的依赖存储在私服仓库及本地仓库中。
介绍
私服:
是一种特殊的远程仓库,它是架设在
局域网内
的仓库服务,用来代理位于外部的中央仓库,
用于
解决团队内部的资源共享与资源同步问题。
依赖查找顺序:
•本地仓库
•私服仓库
•中央仓库
注意事项:
私服在企业项目开发中,一个项目
/
公司,只需要一台即可(无需我们自己搭建,会使
用即可)。

资源上传与下载

资源上传与下载,我们需要做三步配置,执行一条指令。
第一步配置:在
maven
的配置文件中配置访问私服的用户名、密码。
第二步配置:在
maven
的配置文件中配置连接私服的地址
(url
地址
)
。
第三步配置:在项目的
pom.xml
文件中配置上传资源的位置
(url
地址
)
。
配置好了上述三步之后,要上传资源到私服仓库,就执行执行
maven
生命周期:
deploy
私服仓库说明:
•
RELEASE:存储自己开发的
RELEASE
发布版本的资源。
•
SNAPSHOT:存储自己开发的
SNAPSHOT
发布版本的资源。
•
Central:存储的是从中央仓库下载下来的依赖。
项目版本说明:
•
RELEASE(发布版本
)
:功能趋于稳定、当前更新停止,可以用于发行的版本,存储在私服中
的
RELEASE
仓库中。
•
SNAPSHOT(快照版本
)
:功能不稳定、尚处于开发中的版本,即快照版本,存储在私服的
SNAPSHOT仓库中。
具体操作



配置完成之后,我们就可以在
tlias-parent
中执行
deploy
生命周期,将项目发布到私服仓库中。

通过日志,我们可以看到,这几个模块打的
jar
包确实已经上传到了私服仓库中(由于当前我们的项目是SNAPSHOT
版本,所以
jar
包是上传到了
snapshot
仓库中)
那接下来,我们再来打开私服来看一下:

我们看到,我们项目中的这几个模块,在私服中都有了。 那接下来,当其他项目组的开发人员在项目中,就可以直接通过依赖的坐标,就可以完成引入对应的依赖,此时本地仓库没有,就会自动从私服仓库中下载。