目录
5、在 main 目录下新建 java 和 resources文件夹
6、把 java 和 resources文件夹转成source root
一、 回顾[ 理解]
1. Maven 的好处
节省磁盘空间
可以一键构建
可以跨平台
应用在大型项目时可以提高开发效率
2. 安装配置 maven
注意:3.3+版本需要 jdkj.7+以上的支持
3. 三种仓库
本地仓库
远程仓库(私服)
中央仓库
4. 常见的命令
Compile
Test
Package
Install
Deploy
Clean
5. 坐标的书写规范
groupId 公司或组织域名的倒序
artifactId 项目名或模块名
version 版本号
6. 如何添加坐标
1、在本地仓库中搜索
2、互联网上搜,推荐网址 http://www.mvnrepository.com/
7. 依赖范围
Compile
Test
Runtime
Provided
二、maven 构建 SSM 工程[ 应用]
1. 需求
实现 SSM 工程构建,规范依赖管理。场景:根据 id展示商品信息
2. 准备数据库
3. 创建一个 maven
1、新建一个 ssm_maven 项目,使用下图选中的骨架
2、填写坐标
3、查看是否使用的自己的私服
5、在 main 目录下新建 java 和 resources文件夹
6、把 java 和 resources文件夹转成source root
7、修改编译版本,在 pom.xml 文件中添加
4. 知识点准备
4.1 什么是依赖传递
先添加 springmvc的核心依赖的坐标
会发现出现除了 spring-webmvc 以外的其他 jar。因为我们的项目依赖 spring-webmv.jar,而spring-webmv.jar 会依赖spring-beans.jar 等等,所以 spring-beans.jar 这些 jar 包也出现在了我们的 maven 工程中,这种现象我们称为依赖传递。从下图中可看到他们的关系:(请注意spring-beans 的版本)
4.2 依赖冲突的解决
接着添加一个依赖
我们会发现这两个 jar 包同时都依赖了 spring-beans
但是spring-webmvc 依赖 spirng-beans-4.2.4,spring-context 依赖 spring-beans-5.0.2,但是发现
spirng-beans-4.2.4 加入到工程中
而我们希望 spring-beans-5.0.2 加入工程。这就造成了依赖冲突。解决依赖冲突有以下原则:
4.2.1 依赖调解原则
maven 自动按照下边的原则调解:
1 、第一声明者优先原则
在 pom 文件定义依赖,先声明的依赖为准。
测试:
如果将上边 spring-webmvc 和 spring-context 顺序颠倒,系统将导入 spring-beans-5.0.2。
分析:
由于 spring-webmvc 在前边以 spring-webmvc 依赖的 spring-beans-5.0.2 为准,所以最终spring-beans-5.0.2 添加到了工程中。
2、路径近者优先原则
例如:还是上述情况,spring-contex 和 spring-webmvc 都会传递过来 spirng-beans,那如果直接把 spring-beans 的依赖直接写到 pom 文件中,那么项目就不会再使用其他依赖传递来的 spring-beans,因为自己直接在 pom 中定义 spring-beans要比其他依赖传递过来的路径要近。
在本工程中的 pom 中加入 spirng-beans-5.0.2 的依赖,根据路径近者优先原则,系统将导入spirng-beans-5.0.2:
4.2.2 排除依赖
上边的问题也可以通过排除依赖方法辅助依赖调解,如下:
比如在依赖 spring-webmvc 的设置中添加排除依赖,排除 spring-beans,
下边的配置表示:依赖 spring-webmvc,但排除 spring-webmvc 所依赖的 spring-beans。
4.2.3 锁定版本
面对众多的依赖,有一种方法不用考虑依赖路径、声明优化等因素可以采用直接锁定版本的方法确定依赖构件的版本,版本锁定后则不考虑依赖的声明顺序或依赖的路径,以锁定的版本的为准添加到工程中,此方法在企业开发中常用。
如下的配置是锁定了 spring-beans 和 spring-context 的版本:
还可以把版本号提取出来,使用<properties>标签设置成变量
注意:在工程中锁定依赖的版本并不代表在工程中添加了依赖,如果工程需要添加锁定版本的依赖则需要单独添加<dependencies></dependencies>标签,如下:
5. 定义 pom.xml
maven 工程首先要识别依赖,web 工程实现 SSM 整合,需要依赖 spring-webmvc5.0.2、
spring5.0.2、mybatis3.4.5等,在 pom.xml 添加工程如下依赖:
(在实际企业开发中会有架构师专门来编写 pom.xml)
分两步:1)锁定依赖版本
2)添加依赖
6. Dao 层
6.1 pojo
6.2 dao 层代码
6.3 配置文件
6.4 单元测试
7. Service 层
7.1 代码
7.2 配置文件
8. Web 层
8.1 代码
8.2 配置文件
springmvc.xml
Web.xml
加载 spring容器,配置 springmvc前端控制器
9. Jsp
/WEB-INF/jsp/viewItem.jsp 如下:
10. 运行 与调试
添加 tomcat7插件,双击右侧tomcat7 运行
三、 分模块构建工程[ 应用]
基于上边的三个工程分析
继承:创建一个 parent 工程将所需的依赖都配置在 pom 中
聚合:聚合多个模块运行。
1. 需求
需求描述
将 SSM 工程拆分为多个模块开发:
理解 继承和聚合
通常继承和聚合同时使用。
何为继承?
继承是为了消除重复,如果将 dao、service、web 分开创建独立的工程则每个工程的 pom.xml文件中的内容存在重复,比如:设置编译版本、锁定 spring的版本的等,可以将这些重复的配置提取出来在父工程的 pom.xml 中定义。
何为聚合?
项目开发通常是分组分模块开发,每个模块开发完成要运行整个工程需要将每个模块聚合在一起运行,比如:dao、service、web 三个工程最终会打一个独立的war 运行。
2. 案例实现
2.1 maven-parent 父模块
2.1.1 创建父工程
1、选择骨架创建父工程
2、填写坐标
3、确认使用的是本地仓库
4、注意代码所在的路径(默认)
5、设置项目的打包方式
2.1.2 定义 pom.xml
在父工程的 pom.xml 中抽取一些重复的配置的,比如:锁定 jar 包的版本、设置编译版本等。
2.1.3 将父工程发布至仓库
父工程创建完成执行 install 将父工程发布到仓库方便子工程继承
2.2 ssm_dao 子模块
2.2.1 创建 dao 子模块
1、在父工程上右击创建 maven 模块:
2、选择“跳过骨架选择”:
3、填写模块名称
4、下一步,确定项目的目录
5、打包方式是 jar
2.2.2 定义 pom.xml
只添加到dao层的 pom,mybatis 和 spring 的整合相关依赖
2.2.3 dao 代码
2.2.4 配置文件
将 applicationContext.xml拆分出一个applicationContext-dao.xml,此文件中只配置 dao 相关
2.2.5 单元测试
2.2.6把 dao 模块 install 到本地仓库
2.3 ssm_service 子模块.
2.3.1 创建 service 子模块
方法同 ssm_dao 模块创建方法,模块名称为 ssm_service。
2.3.2 定义 pom.xml
2.3.3 service 接口
将 ssm_maven 工程中的service接口拷贝到 src/main/java中:
2.3.4 配置文件
2.3.5 依赖范围对传递依赖的影响(了解)
2.3.5.1 问题描述
2.3.5.3 依赖范围对传递依赖的影响
2.3.6 单元测试
2.3.7 Install 到本地仓库
2.4 ssm_web 子模块
2.4.1 创建 web 子模块
2、确认使用自己的本地仓库
3、填写模块名称
使用骨架创建 web 项目会花费些时间,请耐心等待
5、添加打包方式war
2.4.2 定义 pom.xml
2.4.3 controller
2.4.4 配置文件
2.5 运行 调试
方法 1:在ssm_web 工程的 pom.xml 中配置 tomcat 插件运行
运行 ssm_web 工程它会从本地仓库下载依赖的 jar 包,所以当 ssm_web 依赖的 jar 包内容修
改了必须及时发布到本地仓库,比如:ssm_web 依赖的 ssm_service 修改了,需要及时将ssm_service 发布到本地仓库。
方法 2:在父工程的 pom.xml 中配置 tomcat插件运行,自动聚合并执行
推荐方法2,如果子工程都在本地,采用方法2则不需要子工程修改就立即发布到本地仓库,
父工程会自动聚合并使用最新代码执行。
注意:如果子工程和父工程中都配置了tomcat 插件,运行的端口和路径以子工程为准。
3. 分模块构建工程-- 依赖整合
每个模块都需要 spring 或者 junit 的 jar,况且最终 package 打完包最后生成的项目中的jar 就是各个模块依赖的整合,所以我们可以把项目中所需的依赖都可以放到父工程中,模块中只留模块和模块之间的依赖,那父工程的 pom.xml 可以如下配置:
四、 maven 私服[ 了解]
1. 需求
正式开发,不同的项目组开发不同的工程。
ssm_dao工程开发完毕,发布到私服。
ssm_service 从私服下载 dao
2. 分析
3. 搭建私服环境
3.1 下载 nexus
3.2 安装 nexus
3.3 卸载 nexus
3.4 启动 nexus
3.5 仓库类型
4. 将项目发布到私服
4.1 需求
4.2 配置
4.3 测试
5. 从私服下载 jar 包
5.1 需求
5.2 管理仓库组
5.3 在 setting.xml 中配置仓库
5.4 测试从私服下载 jar 包
五、 把第三方 jar 包放入本地仓库或私服
1. 导入本地库
2. 导入私服
3. 参数说明