| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> Spring---Maven高级 -> 正文阅读 |
|
[Java知识库]Spring---Maven高级 |
目录 1.分模块开发1.1分模块开发设计
分模块开发设计的分类:
1.按照功能进行拆分(防止多个业务之间,由于某一个业务出现问题而影响全部业务)
2.按照模块进行拆分(通过添加模块依赖可以解决代码冗余)
将原始模块按照功能拆分成若干个子模块,方便模块间的相互调用,接口共享。
刚刚我们说了可以将
domain
层进行拆分,除了
domain
层,我们也可以将其他的层也拆成一个个对
立的模块,如
:
1.2 分模块开发实现
前面我们已经完成了
SSM
整合,接下来,咱们就基于
SSM
整合的项目来实现对项目的拆分。
1.2.1 环境准备
将
资料
\maven_02_ssm
部署到
IDEA
中,将环境快速准备好,部署成功后,项目的格式如下
:
1.2.2 抽取domain层
步骤
1:
创建新模块
创建一个名称为
maven_03_pojo
的
jar
项目
,
为什么项目名是从
02
到
03
这样创建,原因后面我们会提
到,这块的名称可以任意。
步骤
2:
项目中创建
domain
包
在
maven_03_pojo
项目中创建
com.itheima.domain
包,并将
maven_02_ssm
中
Book
类拷贝到该包
中
步骤
3:
删除原项目中的
domain
包
删除后,
maven_02_ssm
项目中用到
Book
的类中都会有红色提示,如下
:
说明
:
出错的原因是
maven_02_ssm
中已经将
Book
类删除,所以该项目找不到
Book
类,所以报错
要想解决上述问题,我们需要在
maven_02_ssm
中添加
maven_03_pojo
的依赖。
步骤
4:
建立依赖关系
在
maven_02_ssm
项目的
pom.xml
添加
maven_03_pojo
的依赖
因为添加了依赖,所以在
maven_02_ssm
中就已经能找到
Book
类,所以刚才的报红提示就会消
失。
步骤5:编译maven_02_ssm项目
编译
maven_02_ssm
你会在控制台看到如下错误
错误信息为:不能解决
maven_02_ssm
项目的依赖问题,找不到
maven_03_pojo
这个
jar
包。
为什么找不到呢
?
原因是
Maven
会从本地仓库找对应的
jar
包,但是本地仓库又不存在该
jar
包所以会报错。
在
IDEA
中是有
maven_03_pojo
这个项目,所以我们只需要将
maven_03_pojo
项目安装到本地仓库
即
可。
步骤
6:
将项目安装本地仓库
将需要被依赖的项目
maven_03_pojo
,使用
maven
的
install
命令,把其安装到
Maven
的本地仓库
中。
?安装成功后,在对应的路径下就看到安装好的jar包 说明:具体安装在哪里,和你们自己电脑上Maven的本地仓库配置的位置有关。
当再次执行
maven_02_ssm
的
compile
的命令后,就已经能够成功编译。
1.2.3 抽取Dao层
步骤
1:
创建新模块
创建一个名称为
maven_04_dao
的
jar
项目
步骤2:项目中创建dao包 在maven_04_dao项目中创建com.itheima.dao包,并将maven_02_ssm中BookDao类拷贝到该包 中
在
maven_04_dao
中会有如下几个问题需要解决下
:
项目
maven_04_dao
的
BookDao
接口中
Book
类找不到报错
解决方案在
maven_04_dao
项目的
pom.xml
中添加
maven_03_pojo
项目
项目
maven_04_dao
的
BookDao
接口中,
Mybatis
的增删改查注解报错
解决方案在
maven_04_dao
项目的
pom.xml
中添加
mybatis
的相关依赖
步骤
3:
删除原项目中的
dao
包
删除
Dao
包以后,因为
maven_02_ssm
中的
BookServiceImpl
类中有使用到
Dao
的内容,所以需要
在
maven_02_ssm
的
pom.xml
添加
maven_04_dao
的依赖
此时在
maven_02_ssm
项目中就已经添加了
maven_03_pojo
和
maven_04_dao
包
?再次对maven_02_ssm项目进行编译,又会报错,如下
和刚才的错误原因是一样的,
maven
在仓库中没有找到
maven_04_dao
,
所以此时我们只需要将
maven_04_dao
安装到
Maven
的本地仓库即可。
步骤
4:
将项目安装到本地仓库
将需要被依赖的项目
maven_04_dao
,使用
maven
的
install
命令,把其安装到
Maven
的本地仓库
中
?安装成功后,在对应的路径下就看到了安装好对应的jar包
当再次执行
maven_02_ssm
的
compile
的指令后,就已经能够成功编译。
1.2.4 运行测试并总结
2
,依赖管理
我们现在已经能把项目拆分成一个个独立的模块,当在其他项目中想要使用独立出来的这些模块,
只需要在其
pom.xml
使用标签来进行
jar
包的引入即可。
其实就是依赖,关于依赖管理里面都涉及哪些内容,我们就一个个来学习下
:
依赖传递
可选依赖
排除依赖
我们先来说说什么是依赖
:
依赖指当前项目运行所需的
jar
,一个项目可以设置多个依赖。
格式为
:
2.1 依赖传递与冲突问题
回到我们刚才的项目案例中,打开
Maven
的面板,你会发现
:
在项目所依赖的这些jar包中,有一个比较大的区别就是有的依赖前面有箭头> ,有的依赖前面没有。
那么这个箭头所代表的含义是什么
?
打开前面的箭头,你会发现这个
jar
包下面还包含有其他的
jar
包
你会发现有两个maven_03_pojo的依赖被加载到Dependencies中,那么maven_04_dao中的
maven_03_pojo
能不能使用呢
?
要想验证非常简单,只需要把
maven_02_ssm
项目中
pom.xml
关于
maven_03_pojo
的依赖注释或删
除掉
在
Dependencies
中移除自己所添加
maven_03_pojo
依赖后,打开
BookServiceImpl
的类,你会发
现
Book
类依然存在,可以被正常使用
这个特性其实就是我们要讲解的
依赖传递
。
依赖是具有传递性的
:
情况一
:
在
maven_02_ssm
的
pom.xml
中添加两个不同版本的
Junit
依赖
:
?
通过对比,会发现一个结论
特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的。
情况二
:
路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
A
通过
B
间接依赖到
E1
A
通过
C
间接依赖到
E2
A
就会间接依赖到
E1
和
E2,Maven
会按照层级来选择,
E1
是
2
度,
E2
是
3
度,所以最终会选择
E1
情况三
:
声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
A
通过
B
间接依赖到
D1
A
通过
C
间接依赖到
D2
D1
和
D2
都是两度,这个时候就不能按照层级来选择,需要按照声明来,谁先声明用谁,也就是说
B在
C
之前声明,这个时候使用的是
D1
,反之则为
D2
但是对应上面这些结果,大家不需要刻意去记它。因为不管
Maven
怎么选,最终的结果都会在
Maven
的
Dependencies面板中展示出来,展示的是哪个版本,也就是说它选择的就是哪个版本,如:
如果想更全面的查看Maven中各个坐标的依赖关系,可以点击Maven面板中的show Dependencies ?2.2 可选依赖和排除依赖2.2.1 方案一:可选依赖
可选依赖指对外隐藏当前所依赖的资源---不透明
在
maven_04_dao
的
pom.xml,
在引入
maven_03_pojo
的时候,添加
optional
此时
BookServiceImpl
就已经报错了
,
说明由于
maven_04_dao
将
maven_03_pojo
设置成可选依
赖,导致
maven_02_ssm
无法引用到
maven_03_pojo
中的内容,导致
Book
类找不到。
? 2.2.2方案二:排除依赖
排除依赖指主动断开依赖的资源,被排除的资源无需指定版本---不需要
前面我们已经通过可选依赖实现了阻断
maven_03_pojo
的依赖传递,对于排除依赖,则指的是已经
有依赖的事实,也就是说
maven_02_ssm
项目中已经通过依赖传递用到了
maven_03_pojo
,此时
我们
需要做的是将其进行排除,所以接下来需要修改
maven_02_ssm
的
pom.xml
这样操作后,
BookServiceImpl
中的
Book
类一样也会报错。
当然
exclusions
标签带
s
说明我们是可以依次排除多个依赖到的
jar
包,比如
maven_04_dao
中有依
赖
junit
和
mybatis,
我们也可以一并将其排除
3,聚合和继承3.1聚合?
关于聚合具体的实现步骤为
:
步骤1:创建一个空的maven项目 ?步骤2:将项目的打包方式改为pom
步骤3:pom.xml添加所要管理的项目
步骤4:使用聚合统一管理项目 ?
测试发现,当
maven_01_parent
的
compile
被点击后,所有被其管理的项目都会被执行编译操作。这就是聚合工程的作用。
说明:聚合工程管理的项目在进行运行的时候,会按照项目与项目之间的依赖关系来自动决定执行的顺序和配置的顺序无关。聚合工程主要是用来管理项目
。
3.2 继承spring-webmvc、spring-jdbc在三个项目模块中都有出现,这样就出现了重复的内容
spring
-
test
只在
ssm_crm
和
ssm_goods
中出现,而在
ssm_order
中没有,这里是部分重复的内
容
我们使用的
spring
版本目前是
5.2.10.RELEASE
,
假如后期要想升级
spring
版本,所有跟
Spring
相关
jar
包都得被修改,涉及到的项目越多,维护成本越高
面对上面的这些问题,我们就得用到接下来要学习的
继承
所谓继承:描述的是两个工程间的关系,与java中的继承相似,子工程可以继承父工程中的配置信
息,常见于依赖关系的继承。
作用:
简化配置
减少版本冲突
步骤
1:
创建一个空的
Maven
项目并将其打包方式设置为
pom
因为这一步和前面
maven
创建聚合工程的方式是一摸一样,所以我们可以单独创建一个新的工程,也可以直接和聚合公用一个工程。实际开发中,聚合和继承一般也都放在同一个项目中,但是这两个的
功能是不一样的。
步骤
2:
在子项目中设置其父工程
分别在
maven_02_ssm
,
maven_03_pojo
,
maven_04_dao
的
pom.xml
中添加其父项目为
maven_01_parent
步骤3:优化子项目共有依赖导入问题
1.
将子项目共同使用的
jar
包都抽取出来,维护在父项目的
pom.xml
中
2.
删除子项目中已经被抽取到父项目的
pom.xml
中的
jar
包,如在
maven_02_ssm
的
pom.xml
中将已
经出现在父项目的
jar包删除掉,
删除完后,你会发现父项目中有依赖对应的
jar
包,子项目虽然已经将重复的依赖删除掉了,但是刷新
的时候,子项目中所需要的
jar
包依然存在。
当项目的
<parent>
标签被移除掉,会发现多出来的
jar
包依赖也会随之消失。
3.
将
maven_04_dao
项目的
pom.xml
中的所有依赖删除,然后添加上
maven_01_parent
的父项目坐
标
,刷新并查看
Maven
的面板,会发现
maven_04_dao
同样引入了父项目中的所有依赖。
?
这样我们就可以解决刚才提到的第一个问题,将子项目中的公共
jar
包抽取到父工程中进行统一添加依赖,这样做的可以简化配置,并且当父工程中所依赖的
jar
包版本发生变化,所有子项目中对应的
jar
包版本也会跟着更新。
?
步骤
4:
优化子项目依赖版本问题
如果把所有用到的
jar
包都管理在父项目的
pom.xml
,看上去更简单些,但是这样就会导致有很多项
目引入了过多自己不需要的
jar
包。
1.
在父工程
mavne_01_parent
的
pom.xml
来定义依赖管理
2.
将
maven_02_ssm
的
pom.xml
中的
junit
依赖删除掉,刷新
Maven
?
刷新完会发现,在
maven_02_ssm
项目中的
junit
依赖并没有出现,所以我们得到一个结论
:
<dependencyManagement>
标签不真正引入
jar
包,而是配置可供子项目选择的
jar
包依赖
子项目要想使用它所提供的这些
jar
包,需要自己添加依赖,并且不需要指定
<version>
3.
在
maven_02_ssm
的
pom.xml
添加
junit
的依赖
注意:这里就不需要添加版本了,这样做的好处就是当父工程
dependencyManagement
标签中的版本发生变化后,子项目中的依赖版本也会跟着发生变化
4.
在
maven_04_dao
的
pom.xml
添加
junit
的依赖
这个时候,
maven_02_ssm
和
maven_04_dao
这两个项目中的
junit
版本就会跟随着父项目中的标签
dependencyManagement
中
junit
的版本发生变化而变化。不需要
junit
的项目就不需要添加对应
的依赖即可。
3.2.1小结
注意事项
:
1.
子工程中使用父工程中的可选依赖时,仅需要提供群组
id
和项目
id
,无需提供版本,版本由父
工程统一提供,避免版本冲突
2.
子工程中还可以定义父工程中没有定义的依赖关系
,
只不过不能被父工程进行版本统一管理
3.3 聚合与继承的区别3.3.1 聚合与继承的区别
3.3.2 IDEA
构建聚合与继承工程
其实对于聚合和继承工程的创建,
IDEA
已经能帮助我们快速构建,具体的实现步骤为
:
步骤
1:
创建一个
Maven
项目
创建一个空的
Maven
项目,可以将项目中的
src
目录删除掉,这个项目作为聚合工程和父工程。
?
步骤
2:
创建子项目
该项目可以被聚合工程管理,同时会继承父工程。 ?
创建成功后,
maven_parent
即是聚合工程又是父工程,
maven_web
中也有
parent
标签,继承的就
是
maven_parent,
对于难以配置的内容都自动生成。
按照上面这种方式,大家就可以根据自己的需要来构建分模块项目。
4,属性4.1 属性4.1.1依赖版本管理4.1.2 解决步骤
步骤
1:
父工程中定义属性
步骤2:修改依赖的version此时,我们只需要更新父工程中properties标签中所维护的jar包版本,所有子项目中的版本也就跟
着更新。
4.2 配置文件加载属性步骤1:父工程定义属性
步骤
2:jdbc.properties
文件中引用属性
在
jdbc.properties
,将
jdbc.url
的值直接获取
Maven
配置的属性
步骤
3:
设置
maven
过滤文件范围
Maven
在默认情况下是从当前项目的
src\main\resources
下读取文件进行打包。现在我们需要打包
的资源文件是在
maven_02_ssm
下
,
需要我们通过配置来指定下具体的资源目录。
?
说明
:
directory
路径前要添加
../
的原因是
maven_02_ssm
相对于父工程的
pom.xml
路径是在其上
一层的目录中,所以需要添加。
修改完后,注意
maven_02_ssm
项目的
resources目录就多了些东西,如下:
?
步骤
4:
测试是否生效
测试的时候,只需要将
maven_02_ssm
项目进行打包,然后观察打包结果中最终生成的内容是否为
Maven
中配置的内容。
?
上面的属性管理就已经完成,但是有一个问题没有解决,因为不只是
maven_02_ssm
项目需要有属性
被父工程管理,如果有多个项目需要配置,该如何实现呢
?
方式一:
?方式二: ?说明:打包的过程中如果报如下错误:
原因就是
Maven
发现你的项目为
web
项目,就会去找
web
项目的入口
web.xml[
配置文件配置的方
式
]
,发现没有找到,就会报错。
解决方案
1
:在
maven_02_ssm
项目的
src\main\webapp\WEB
-
INF\
添加一个
web.xml
文件
? ?解决方案2: 配置maven打包war时,忽略web.xml检查 ?
具体如何查看这些属性
:
在
cmd命令行中输入mvn help:system
具体使用,就是使用
${key}
来获取,
key
为等号左边的,值为等号右边的,比如获取红线的值,对
应的写法为
${java.runtime.name}
4.3 版本管理
关于这个版本管理解决的问题是,在
Maven
创建项目和引用别人项目的时候,我们都看到过如下内容
:
?5,多环境配置与应用5.1 多环境开发
maven
提供配置多种环境的设定,帮助开发者在使用过程中快速切换环境。具体实现步骤
:
步骤
1:
父工程配置多个环境
,
并指定默认激活环境
步骤
2:
执行安装查看
env_dep
环境是否生效
?步骤3:切换默认环境为生产环境
在activation属性中activeByDefault设置为true
步骤
4:
执行安装并查看env_pro环境是否生效
步骤5:命令行实现环境切换
步骤
6:
执行安装并查看env_test环境是否生效
? 5.2 跳过测试
方式一
:IDEA
工具实现跳过测试
?
图中的按钮为
Toggle 'Skip Tests' Mode
,
Toggle
翻译为切换的意思,也就是说在测试与不测试之间进行切换。
方式二
:
配置插件实现跳过测试
在父工程中的
pom.xml
中添加测试插件配置
方式三:命令行跳过测试
使用
Maven
的命令行,
mvn
指令
-
D skipTests
注意事项
:
执行的项目构建指令必须包含测试生命周期,否则无效果。例如执行
compile
生命周期,不经过
test
生命周期。
该命令可以不借助
IDEA
,直接使用
cmd
命令行进行跳过测试,需要注意的是
cmd
要在
pom.xml
所在
目录下进行执行。
6,私服6.1 私服简介??
私服:公司内部搭建的用于存储Maven资源的服务器
远程仓库:Maven开发团队维护的用于存储Maven资源的服务器
所以说
:私服是一台独立的服务器,用于解决团队内部的资源共享与资源同步问题
? 6.2 私服安装
步骤
1:
下载解压
将
资料
\latest
-
win64.zip
解压到一个空目录下。
步骤
2:启动Nexus
使用cmd进入到解压目录下的nexus-3.30.1-01\bin ,执行如下命令: ?nexus.exe /run nexus
看到如下内容,说明启动成功
步骤
3:
浏览器访问
访问地址为
:http://localhost:8081
?
步骤
4:
首次登录重置密码
?输入用户名和密码进行登录,登录成功后,出现如下页面 ?点击下一步,需要重新输入新密码,为了和后面的保持一致,密码修改为admin ?设置是否运行匿名访问 ?点击完成 至此私服就已经安装成功。如果要想修改一些基础配置信息,可以使用:
修改基础配置信息
安装路径下
etc
目录中
nexus-default.properties
文件保存有
nexus
基础配置信息,例如
默认访问端口。
修改服务器运行配置信息
安装路径下
bin
目录中
nexus.vmoptions
文件保存有
nexus
服务器启动对应的配置信息,例如
默认占用内存空间。
6.3 私服仓库分类
私服资源操作流程分析
:
?
? 6.4 本地仓库访问私服配置
我们通过
IDEA
将开发的模块上传到私服,中间是要经过本地
Maven
的
本地
Maven
需要知道私服的访问地址以及私服访问的用户名和密码
私服中的仓库很多,
Maven
最终要把资源上传到哪个仓库
?
Maven
下载的时候,又需要携带用户名和密码到私服上找对应的仓库组进行下载,然后再给
IDEA
?
上面所说的这些内容,我们需要在本地
Maven
的配置文件
settings.xml
中进行配置。
步骤1:私服上配置仓库
?
说明
:
第
5
,
6
步骤是创建
itheima-snapshot
仓库
第
7
,
8
步骤是创建
itheima-release
仓库
步骤
2:
配置本地
Maven
对私服的访问权限
本地
Maven
的配置文件
settings.xml
中进行配置。
?步骤3:配置私服的访问路径 ?
为了避免阿里云
Maven
私服地址的影响,建议先将之前配置的阿里云
Maven
私服镜像地址注释掉,等练习完后,再将其恢复。
? 6.5 私服资源上传与下载
本地仓库与私服已经建立了连接,接下来我们就需要往私服上上传资源和下载资源,具体的实现步骤为
:
步骤2:发布资源到私服
?
注意
:
要发布的项目都需要配置
distributionManagement
标签,要么在自己的
pom.xml
中配置,要么在其
父项目中配置,然后子项目中继承父项目即可。
发布成功,在私服中就能看到:
?
现在发布是在
itheima-snapshot
仓库中,如果想发布到
itheima-release
仓库中就需要将项目
pom.xml
中的
version
修改成
RELEASE
即可。
如果想删除已经上传的资源,可以在界面上进行删除操作:
?如果私服中没有对应的jar,会去中央仓库下载,速度很慢。可以配置让私服去阿里云中下载依赖。 ? ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 10:17:41- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |