Maven的两大特点:
依赖管理:对Jar包的管理过程,即对Jar包的统一管理
项目构建:项目进行编码完毕后,对项目进行编译、测试、打包、部署等操作都可以通过命令来实现
Maven的依赖管理
![](https://i-blog.csdnimg.cn/blog_migrate/418fbba6cf6cc023952b03d1d650e84d.webp?x-image-process=image/format,png)
说明:Maven项目可以通过pom文件中的配置坐标,来找到项目需要的jar包,无需再将Jar包拷贝到lib文件中
坐标的规范:公司名+项目名+版本号
例如:Struts2+core+2.3.24.jar
Apache(公司名称)+struts2(项目名)+2.3.24(版本号)
传递依赖冲突
传递依赖:A依赖B,B依赖C(1.1版本),即B是A的直接依赖,C是A的传递依赖
传递依赖冲突:此时再导入D,D依赖C(1.2版本),则此时C版本存在1.1和1.2两个版本,A,D到底要依赖哪个版本,此时存在冲突
传递依赖冲突的解决
Maven自己调节的原则
同一级别的依赖,满足第一声明者优先的原则
即:在POM文件中谁先定义的,就用谁
不同级别的,符合最短路径原则
即:直接依赖的级别高于传递依赖的级别
手动调节方法----排除依赖与版本锁定
排除依赖Exclude排除依赖
![](https://i-blog.csdnimg.cn/blog_migrate/a6ec56da2081cec0e78c76f1f53f69ca.webp?x-image-process=image/format,png)
版本锁定DependencyManagement
![](https://i-blog.csdnimg.cn/blog_migrate/31fd0cccad66e3449f76e01c04083146.webp?x-image-process=image/format,png)
注:dependencyManagement主要对依赖的管理,并不实际加载依赖,实际加载依赖,是下边的dependencies
即:使用了dependencyManagement来管理的版本,是哪个版本,下边就实际依赖哪个版本
Maven仓库类型
![](https://i-blog.csdnimg.cn/blog_migrate/ccb7b40a3f1b01381d4de154d6b5ef36.webp?x-image-process=image/format,png)
注意:中央仓库中没有Oracle数据库驱动的包
配置本地仓库
![](https://i-blog.csdnimg.cn/blog_migrate/e999d00d94ccd3eb6507319f925f1ecc.webp?x-image-process=image/format,png)
2.解压到一个文件中
![](https://i-blog.csdnimg.cn/blog_migrate/e518d4d4f223c22a6c949969b6692351.webp?x-image-process=image/format,png)
Maven项目标准目录结构
![](https://i-blog.csdnimg.cn/blog_migrate/0f7faa9f6a4e32b8848ec504534e5240.webp?x-image-process=image/format,png)
注意:target目录不是标准目录文件,存放的为src源文件编译后的文件
![](https://i-blog.csdnimg.cn/blog_migrate/29ca68e26d426f89bdcdfcbf002a8747.webp?x-image-process=image/format,png)
Maven常用命令
Clean:清理
将项目根目录下的target目录清理掉
Compile:编译
将项目中的.java文件编译成.class文件
Test:单元测试
单元测试类名要求:XxxxTest.java
项目根目录下,src/test/java目录下的单元测试类都会执行
Package:打包
Web project-----war包
Java project------jar包
Install:安装
解决本地多个项目用一个jar包的问题,将jar包放到本地仓库
项目的拆分
主要思路:将dao、service层的代码以及配置文件全体提取出来到一个表现上独立的工程中,然后将独立的工程install到本地仓库,供其他项目使用,拆分后将项目进行聚合,至此提出父工程的概念
创建父工程
![](https://i-blog.csdnimg.cn/blog_migrate/a662ac0ff0246cbaaa7a40eeb783f808.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/e5197c9f23cbabb773dafa9bb3504df1.webp?x-image-process=image/format,png)
创建好的父工程目录结构:
![](https://i-blog.csdnimg.cn/blog_migrate/cdabd061d0f1b4ef784a0abc674c4106.webp?x-image-process=image/format,png)
创建好的父工程只有pom文件,所以不需要编码,主要作用:
1.项目需要的依赖信息,在父工程中定义,子模块继承过程
2.将各模块聚合到一起
将父工程发布到本地仓库
如果在以后发布service、dao时项目报错,可检查是否将父工程发布到了本地仓库。
创建子工程
![](https://i-blog.csdnimg.cn/blog_migrate/76e8c519b92ff72b47a296cc2c777f71.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/29fbc828abaace26f87218beb52584c4.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/9d9721e0c55cf097c8a90ef6b0fb8249.webp?x-image-process=image/format,png)
创建Maven项目
![](https://i-blog.csdnimg.cn/blog_migrate/6c12ba86a4862e1a418bb1ae18de2bed.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/5ac5af4db1400b744e6ebec75bd4e5fe.webp?x-image-process=image/format,png)
创建web项目产生的问题及解决方式(注意使用update project)
![](https://i-blog.csdnimg.cn/blog_migrate/89da1765f079b569adb8ed5d16efb6f0.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/fb30b80142c9303a5e1f923a1db9e16c.webp?x-image-process=image/format,png)
查找依赖
![](https://i-blog.csdnimg.cn/blog_migrate/74a0d3b07f19fe2c34ba114520bf8590.webp?x-image-process=image/format,png)
依赖范围(注意:provided)
![](https://i-blog.csdnimg.cn/blog_migrate/475b444cd91cf36cc0674fad377e98d3.webp?x-image-process=image/format,png)
打包出现servlet-api冲突问题的解决
![](https://i-blog.csdnimg.cn/blog_migrate/f089d18ce26606a51d2cf701cd8a964a.webp?x-image-process=image/format,png)
改善方法
![](https://i-blog.csdnimg.cn/blog_migrate/ccbd590789e43bd12e3626352884d3ad.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/943331df1b67829caf402a2bb637d94a.webp?x-image-process=image/format,png)
传递依赖的范围
![](https://i-blog.csdnimg.cn/blog_migrate/57fae9c27552c173e18f1130dd4ed1b6.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/dfc793bb7193e4a5012aa355c1cd49cd.webp?x-image-process=image/format,png)
运行调试Maven项目
![](https://i-blog.csdnimg.cn/blog_migrate/a26c2ef3f2013edafba2b90e9e5bfdae.webp?x-image-process=image/format,png)
直接运行:
![](https://i-blog.csdnimg.cn/blog_migrate/d5d4635d9004d0ce42c8d1a7382a1fb7.webp?x-image-process=image/format,png)
调试运行(注意要resource关联源码,不然不能运行):
右键---》Debug As---》Maven build…()
![](https://i-blog.csdnimg.cn/blog_migrate/07d032308eed70730a1458f489a1f6d5.webp?x-image-process=image/format,png)
概念模型
![](https://i-blog.csdnimg.cn/blog_migrate/391b20ccf5a2e246dc1889a5e0a8921d.webp?x-image-process=image/format,png)