前言
我们这一节讲一下Maven
1. 分模块开发的意义
同一个程序我们按功能划分为不同的模块
同一个模块导成jar之类的,这样就可以共享数据了
2. 分模块开发与设计
我们以原来的ssm整合的模块来考虑
我们来把domain这个模块搞消失,重新制造一个模块
我们先创建一个新模块
然后把上面那个模块里面的domain里面的内容复制过来
然后删掉原来springmvc模块里面的domain
然后把这两个模块合在一起操作
在配置文件中增加插件就可以了
pom.xml:
把domain的坐标搞过来就可以了
这个是domain的坐标
这样我们就引进来了
然后就相当于我们有Book这个类了
但是我们会报错,为什么呢,因为我们下载资源的时候,是在本地资源下载的,而我们这个新导入的,本地仓库根本就没有这个坐标
所以我们要把新的maven模块打包放进本地仓库
这里就是我们的本地仓库
所以我们要用install来把当前模块安装到仓库中
点击这个
然后就安装成功了
我们把groupid改为com.itheima
我也不知道为什么会安装到这里,可能是原来安装Maven的时候没有设置好吧
然后我们还要把项目和每个模块的SDK都设置为17的版本,这么就可以了
我们的本地仓库是在这里的
我们点击compile编译
发现成功了,那么就没有问题了
所以就是导入坐标,把这个模块导入本地仓库就OK了
现在我们把dao拆出来
这里开始解决报错
我们在pom中引入pojo的坐标解决Book的问题
然后其他报红是mybatis相关坐标
我们导入就可以了
然后在springmvc模块中引入dao模块
compile一下就报错了,因为我们没有安装
安装一下dao模块到本地仓库中
而且也能用
3. 依赖传递
3.1 依赖传递
依赖就是我们导入的jar包,就是我们导入的坐标
这些就是依赖,有箭头的就表示这个依赖就依靠别的依赖
我们这里可以看出来,Maven2依赖Maven1,那么,我们可以在springmvc中删掉Mavenq1的坐标
这就是依赖传递性,你的依赖依赖了别人,那么你就可以直接使用别人
依赖冲突就是依赖的某个坐标版本不一样
同一个依赖写了多次,以最后配置的版本为准
这就是特殊优先
点击这个按钮,就可以看依赖的层级了
4 可选依赖与排除依赖
4.1 可选依赖
如何把这些依赖给隐藏掉呢,不给别人看
原:
在maven_02_dao中加上
java
<optional>true</optional>
加上这一个就可以隐藏
原:
现在:
所以对应Book也不见了
这是什么意思呢,意思就是你对当前工程的某个资源进行依赖,把它隐藏后,对应资源将不具有依赖性
意思就是我们在dao中把pojo给optional选择true,那么这个pojo就不具有依赖传递了,意思就是pojo这个依赖只能在dao中用,因为这个没有传递,不能在springmvc中用了,因为不能传递了,改成false就是默认的值
但是我的可选依赖好像有问题,不能实现,所以上面的例子就不要看了
4.2 排除依赖
现在我们在dao中导入日志技术的坐标
我们要在springmvc中排除这个坐标
就是在springmvc中导入dao的时候,特定排除日志这个坐标
springmvc:
不需要写版本,因为排除的是排除这门技术
原:
有log4j
现在:
隐藏依赖是dao不给springmvc用
排除依赖是springmvc不用别人的
5. 聚合
就是我们一个模块发生变化,如果没有install的话,其他模块就跟着可能不能用了
所以我们来个管理员类,就是发生了变化,全部一起install
这就是聚合
他就是用来帮助我们做聚合的
所以它的打包方式也会发生变化
默认打包方式是jar
web工程打包方式是war
聚合打包是pom
现在开始说明它来管理三个模块
看得出来有结构了
我们再来执行compile
这样四个工程都参与构建了
注意构建的顺序是和依赖关系相关了,意思是先构建没有依赖的,在构建需要依赖的
6. 继承
有整体一样的依赖,也有部分一样的依赖,怎么简化呢
还有一个问题就是,修改一个依赖的版本号,能不能大家一起改呢
我们用00来作为父工程
其他的都是子工程
然后就是继承关系就是在子类中描述
springmvc_04:
所以我们现在把子工程里面的依赖全部都给父工程
然后就是父工程里面的依赖,如果不是每一个工程都需要的话,就删掉就可以了
比如dao,pojo
spring的东西大家都用
然后就差不多了
然后删除对应springmvc中继承的
就剩这么多了
这样的话,就都有依赖了
而且你把父工程版本改了,所以子工程都对应改了
那如果有两个子工程要junit,有一个不要改怎么搞呢
我们在00这里写上
写上定义依赖管理的话,springmvc那里就没有junit了()
说一下,我们做的操作就是把springmvc中的junit剪切走,然后给到了依赖管理这里,定义在这里的就不是所有的都能继承了,如果你想用这个依赖的话,你要自己写才能用,这个就是依赖管理
然后springmvc中就要写上junit了,但是不能写上版本
springmvc_04:
不用写版本,因为版本就是父工程中的版本,你写了就用的是自己的版本了
这样就有了,但是dao没有,这就成功了
7. 属性
我们看这个,我们全是5.1.9的版本,如何改一个版本,全部跟着走呢
主要是怕漏改了
其实我们可以定义一个变量,那么只需要改这个变量就可以了
我们去维护父工程
我们在properties那里增加一个 <spring.version>5.2.10.RELEASE</spring.version>
就可以维护了,就可以设置属性了
这样改一下就可以了
在增加一个junit
8. 配置文件加载属性
就是说我们能不能把这里的内容也加载为属性,统一管理
就这样就行了吗,这是不行的,我们在pom文件设置的属性,就只能在pom文件中用,所以必须扩大Maven的控制范围
我们用build来构建设定
resources就是用来配置资源文件的,directory是资源文件的目录
第二个就是开启过滤规则,让它能够识别${}这种符号
这就让我们指定的文件可以去解析{}的属性了
但是这样配置还是不能用的
因为这样是找不到的,因为是根据相对路径来找的
这样写也不太好,因为万一其他地方也有这个配置文件呢,我们也要调用呢
这个${project.basedir}表示这个项目所在的目录,所以这样写就可以了
我们在改成locallhost的就可以正常运行了
所以没什么问题
8.1 补充
我们的maven项目要打包的话,必须要有web,xml这个文件才行(有就行了),不用管里面内容,现在我们来演示一下不用web.xml打包的方式
我们导入plugin
这样写就可以了
这个第八的内容并不是很主流,了解即可
project.basedir这个东西属于内置属性
9. 版本管理
10. 多环境开发
从这一节开始就比较实用了
我们先把三种环境定义出来
我们把原来写的jdbc.url给注释掉
这样写就表示jdbc.url这个属性属于env_dep这个环境
然后我们在install一下,然后去maven里面去看生效没有
这里就是war包了
反正默认环境设置的哪个,我们这里运行的就是那个
但我们还以为让它根据我们的指令来选择对应环境
这个可以执行maven指令
-p的意思是指定环境,后面跟环境
11. 跳过测试
我们点package,上面的就是测试
就是在打包前会测试,会走测试用例,万一测试有问题,那么就不能测试了
我们点击这个按钮,就可以跳过测试了,并且test变灰了
我也可以指定跳过测试,这是一个插件,还是写在plugin中
这个就和上面我们点的按钮是一样的效果了
这样打包的时候就没有测试了
现在开始写指定跳过某些测试
这样的话就是BookServiceTest.java不测试
这样就跳过测试了
指令这样写也代表着跳过测试
12. 私服简介与安装
就是我们做的东西在小组之间共享,这个就是私服来实现
一个新的服务器,可以放我们的东西,互联网上的,大家都能用的就是中央
先下载私服
下载这个就可以了
然后我直接在资料里面安装就可以了
就是第一个
这两个都需要
我们先看第一个
lib里面有jar包
进去bin
这里就是启动程序
这两个大文件都不能少的
怎么用呢
我们在上面敲cmd指令
然后输入指令
但是我们运行直接出错了,这是因为目录下面有中文,我们放在soft文件夹下继续试一下
这也是一个服务器,和tomcat一模一样
这下我们就要在浏览器上访问了
我们直接输入http://localhost:8081/
然后点击右上角的登录按钮
这个的意思就是用户名叫做admin,密码在这个路径中
我们去找一下
就是这个
然后登录
设置新密码
允许匿名访问
这个是浏览使用
这个是设置使用
这个是启动配置
这里面比如就可以改端口8081
13. 私服仓库分类
私服也有自己的仓库,我们放东西就是放在这个仓库里面
我们一组的人都从这里面拿东西
但是我们如果要去第三方拿资源,还要访问第三方,还是挺麻烦的,所以我们直接在私服里面创建一个仓库,这个仓库直接拷贝了中央仓库,所以我们就可以只访问私服了
我们的仓库有很多个,有是临时版的,有已经打包好的,有中央仓库,这些统一弄为一个仓库组
第三方资源就是中央仓库没有的资源
宿主仓库就是我们自己用的,代理仓库就是转递中央仓库
仓库组是小组类共享用的
宿主仓库是小组内自己用的
代理仓库是所有项目组都能用的
14. 本地仓库访问私服配置
这组设置是本地文件的设置
就是放在这里的
先配置本地仓库对私服的访问权限
但是这才是我们maven的仓库与配置
我我们来改一下
这样就OK了,很完美,改了配置文件,也改了本地仓库
然后我们找到配置文件的servers
然后我们去私服找id
我们先来创建我们专用的仓库
点那个create
选这个类别
然后直接创建
其实id就是那个仓库名
然后还要告诉私服的url
就是映射
就是这个
我们点入maven-public这个仓库
其实name:maven-public就是我们仓库组的id
这个区域表示的是,这个仓库管理的多少个仓库
然后我们把我们自定义的仓库拖到右边
然后save保存
这里的url就是地址
有了这两个东西,我们的本地仓库就可以和私服打交道了
15. 私服资源上传与下载
注意只有install的时候,只有打包的时候,我们本地应该才会有这些
然后我们要把这四个上传到私服中,要放在哪个仓库中,这个怎么告诉?
所以接下来这个配置要配置到我们的工程里面来,而不是本地仓库了
maven_00_parent:
这个就是id,url就在下面的下面
现在开始发布它
我们先看看私服里面有什么东西
点进去就可以看到里面的东西了
啥也没有
发布到私服中我们就要用指令了
install是把工程打包放在本地
deploy就是发布到私服了
我们第一次操作的时候会下载很多东西
但是我们这个出错了
但是我们在发布pojo的时候出错了
因为pojo没有继承父工程
注意要把原来我们写的setting.xml文件修改保存一下
然后deploy一下
这样我们就成功了
这样我们里面就有东西了
snashot里面有东西
但是release里面没有
为什么呢,因为我们工程的发布版本号叫做snapshot
我们四个都改成release
继承父类的也写成release
这样就有了
我们怎么配置资源从阿里的地方镜像过来呢
找到maven-central这个仓库
它连的就是远程的仓库,换成阿里的就可以了
换这个就可以了
总结
maven我们就讲完了,后面我们开始讲springboot