学习目标:
1:jar包冲突(解决方案:直接排除,直接依赖)
2:工程分解(一个父工程,四(n)个子工程) --重点
3:私服(了解)
什么是Maven
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Orka5Knt-1574263020384)(./img/001.png)]
节省磁盘空间
可以一键构建
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sRGe58Hc-1574263020385)(./img/002.png)]
可以跨平台
应用在大型项目时可以提高开发效率
注意: 3.3+版本需要 jdkj.7+以上的支持
本地仓库
远程仓库(私服)
中央仓库
Compile
Test
Package
Install (将当前项目打的包安装到本地仓库)
Deploy(部署到远程仓库(私服))
Clean
groupId 公司或组织域名的倒序
artifactId 项目名或模块名
version 版本号
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-argBwLkl-1574263020386)(./img/003.png)]
1.在本地仓库中搜索
2.互联网上搜,推荐网址 http://www.mvnrepository.com/
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M2AgpXFl-1574263020387)(./img/004.png)]
属性:
Compile(默认)
Test
Provided
Runtime
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H9SFjqXd-1574263020388)(./img/005.png)]
例如:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pXcj9mHU-1574263020389)(./img/006.png)]
创建一个jar包工程,流程如下图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q9AsWBNA-1574263020390)(./img/007.png)]
哪个jar包在靠上的位置,这个jar包就是先声明的,先声明的jar包下的依赖包,可以优先引入项目中。
我们在pom.xml中引入如下坐标,分别是spring中不同的版本。
4.0.0
com.gavin
maven_day01_demo
1.0-SNAPSHOT
jar
org.springframework
spring-context
5.0.2.RELEASE
org.springframework
spring-beans
4.2.4.RELEASE
我们在控制面板的maven面板,点击查看依赖关系按钮,看到了包和包之间的依赖关系存在冲突,都使用了spring-core包,关系图如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZUaHL64X-1574263020390)(./img/008.png)]
我们再来看看他们依赖包的导入,发现导入的包却没有问题,包使用的都是5.0.2的版本。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ugPK6UGQ-1574263020392)(./img/009.png)]
我们把上面2个包的顺序调换后就变成了低版本的依赖导入。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zk0346SP-1574263020392)(./img/010.png)]
直接依赖比传递依赖路径近,你那么最终进入项目的jar包会是路径近的直接依赖包。
直接依赖:项目中直接导入的jar包就是项目的直接依赖包。
传递依赖(间接依赖):项目中没有直接导入的jar包,可以通过中直接依赖包传递到项目中去。
修改jar包,直接引入依赖spring-core
org.springframework
spring-beans
4.2.4.RELEASE
org.springframework
spring-context
5.0.2.RELEASE
org.springframework
spring-core
4.2.8.RELEASE
此时优先引入的是直接依赖的引用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bvFKPRlb-1574263020394)(./img/011.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Uxm75mVI-1574263020394)(file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml2660\wps44.png)]
当我们需要排除某个jar包的依赖时,在配置exclusions标签的时候,内部可以不写版本号。pom.xml依赖如下:
org.springframework
spring-beans
4.2.4.RELEASE
org.springframework
spring-core
org.springframework
spring-context
5.0.2.RELEASE
快捷操作:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s2PT3pJc-1574263020396)(./img/012.png)]
依赖导入的jar包如下:
没有添加exclusion之前
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zCvM4otQ-1574263020397)(./img/013.png)]
添加exclusion之后,因为排除了4.2.4的版本spring-core的jar包
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lA5ICttf-1574263020398)(./img/014.png)]
总结:
真实项目中,出现1个项目存在多个同种jar包的时候,需要我们进行解决maven的jar包冲突问题
1:直接依赖原则
2:直接排除原则
回顾之前项目开发:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5JFEgxm7-1574263020400)(./img/015.png)]
工程分层后的开发:所有的service和dao的代码都在一起,增强程序的通用性,降低了代码的耦合性
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fYZhBOrQ-1574263020401)(./img/016.png)]
继承和聚合结构图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9SnQWnjA-1574263020402)(./img/017.png)]
特点1(继承):
parent父工程:存放项目的所有jar包。
ssm_web和ssm_service和ssm_dao有选择的继承jar包,并在自己的工程中使用。
特点2(聚合):
ssm_web依赖于ssm_service,ssm_service依赖于ssm_dao,我们启动ssm_web,便可以访问我们的程序。
执行安装的时候,执行ssm_parent,就可以将所有的子工程全部进行安装。
理解继承和聚合总结:
通常继承和聚合同时使用。
· 何为继承?
继承是为了消除重复,如果将 dao、 service、 web 分开创建独立的工程则每个工程的 pom.xml 文件中的内容存在重复,比如:设置编译版本、锁定 spring 的版本的等,可以将这些重复的 配置提取出来在父工程的 pom.xml 中定义。
· 何为聚合?
项目开发通常是分组分模块开发, 每个模块开发完成要运行整个工程需要将每个模块聚合在 一起运行,比如: dao、 service、 web 三个工程最终会打一个独立的 war 运行。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PyWjRaI7-1574263020403)(./img/018.png)]
准备工作,导入sql
创建数据库itcastmaven
执行items.sql
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EkfuNYr0-1574263020404)(./img/019.png)]
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `items`
-- ----------------------------
DROP TABLE IF EXISTS `items`;
CREATE TABLE `items` (
`id` int(10) NOT NULL auto_increment,
`name` varchar(20) default NULL,
`price` float(10,0) default NULL,
`pic` varchar(40) default NULL,
`createtime` datetime default NULL,
`detail` varchar(200) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of items
-- ----------------------------
INSERT INTO `items` VALUES ('1', 'web课程', '1000', null, '2018-03-13 09:29:30', '带我走上人生巅峰');
INSERT INTO `items` VALUES ('2', '大神之路', null, null, '2018-03-28 10:05:52', '插入测试');
INSERT INTO `items` VALUES ('3', '大神之路二', '199', null, '2018-03-07 10:08:04', '插入测试');
INSERT INTO `items` VALUES ('7', '插入测试', null, null, null, null);
INSERT INTO `items` VALUES ('8', '插入测试', null, null, null, null);
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-efLMm7Jg-1574263020404)(./img/020.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AVTYkYkg-1574263020405)(./img/021.png)]
删除src文件夹
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ACvbqtJn-1574263020407)(./img/022.png)]
4.0.0
com.gavin
ssm_parent
1.0-SNAPSHOT
pom
5.0.2.RELEASE
1.6.6
1.2.12
5.1.6
3.4.5
1.6.8
4.12
2.0
2.5
1.2
1.3.0
1.0.9
UTF-8
UTF-8
org.aspectj
aspectjweaver
${aspectjweaver.version}
org.springframework
spring-aop
${spring.version}
org.springframework
spring-context
${spring.version}