Maven-教案-实战(IDEA)

学习目标:

1:jar包冲突(解决方案:直接排除,直接依赖)

2:工程分解(一个父工程,四(n)个子工程) --重点

3:私服(了解)

Maven-教案-实战(IDEA)

1. 第一章:****课程大纲

1.1. 回顾[理解]

什么是Maven

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Orka5Knt-1574263020384)(./img/001.png)]

1.1.1. Maven好处

  1. 节省磁盘空间

  2. 可以一键构建

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sRGe58Hc-1574263020385)(./img/002.png)]

  1. 可以跨平台

  2. 应用在大型项目时可以提高开发效率

1.1.2. 安装配置 maven

注意: 3.3+版本需要 jdkj.7+以上的支持

1.1.3. 三种仓库

  1. 本地仓库

  2. 远程仓库(私服)

  3. 中央仓库

1.1.4. 常见的命令

  1. Compile

  2. Test

  3. Package

  4. Install (将当前项目打的包安装到本地仓库)

  5. Deploy(部署到远程仓库(私服))

  6. Clean

1.1.5. 坐标的书写规范

  1. groupId 公司或组织域名的倒序

  2. artifactId 项目名或模块名

  3. version 版本号

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-argBwLkl-1574263020386)(./img/003.png)]

1.1.6. 如何添加坐标

1.在本地仓库中搜索

2.互联网上搜,推荐网址 http://www.mvnrepository.com/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M2AgpXFl-1574263020387)(./img/004.png)]

1.1.7. 依赖范围

属性:

  1. Compile(默认)

  2. Test

  3. Provided

  4. Runtime

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H9SFjqXd-1574263020388)(./img/005.png)]

例如:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pXcj9mHU-1574263020389)(./img/006.png)]

2. 第二章:**[**Maven]中的jar包冲突问题

创建一个jar包工程,流程如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q9AsWBNA-1574263020390)(./img/007.png)]

2.1. jar包冲突(问题):第一声明优先原则

​ 哪个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)]

2.2. jar包冲突(方案一):路径近者优先原则

直接依赖比传递依赖路径近,你那么最终进入项目的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)]

2.3. jar包冲突(方案二):直接排除法

当我们需要排除某个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:直接排除原则

3. [第三章:工程分层]

回顾之前项目开发:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5JFEgxm7-1574263020400)(./img/015.png)]

工程分层后的开发:所有的service和dao的代码都在一起,增强程序的通用性,降低了代码的耦合性

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fYZhBOrQ-1574263020401)(./img/016.png)]

3.1. 聚合(多模块)和继承

继承和聚合结构图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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)]

3.2. 案例

准备工作,导入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)]

3.3. ssm_paren

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AVTYkYkg-1574263020405)(./img/021.png)]

删除src文件夹

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ACvbqtJn-1574263020407)(./img/022.png)]

3.3.1. pom.xml



    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}
            

            
            
               

你可能感兴趣的:(ide)