一、 回顾
1. maven 的两个优点
依赖管理:对jar包统一管理
项目构建: 对编码完成后的过程标准化,交给命令来完成
适合大型项目的开发,可以把一个大的项目拆分成多个子项目
2. 常用的命令
clean 清理target目录
compile:编译
package :打包到target目录
install:安装到本地 仓库
test:测试:执行test/java 源码包中的所有的测试方法
deploy: 部署,把打包后的文件安装到私服
3. 命令的生命周期
清理周期:clean
默认周期:compile, test, package,install ,deploy
站点周期:site :用来项目站点文档-- 一般不用
注意:在同一套生命周期内,执行后面的命令会自动执行前面的所有命令
4. 仓库的分类
本地仓库:本机文件夹
中央仓库: maven团队维护的中央仓库
https://repo1.maven.org/maven2/ 适合下载jar包
https://mvnrepository.com/ 适合找jar包的依赖
私服:第三方服务器
5.自定义骨架
6. 项目依赖jar包,默认的依赖范围是 compile
servlet-api ,jsp-api,选择依赖范围provided
二、教学目标
- 依赖传递冲突解决
- 回顾SSM框架
- 拆分和聚合SSM框架
- 依赖范围对传递依赖的影响(了解)
- 私服的下载和搭建(了解)
三、依赖传递冲突解决
a. 什么是依赖
jar就是依赖
b. 什么是依赖传递
spring-context.jar 依赖了spring-aop.jar ,在依赖了spring-context.jar会自动引入spring-aop.jar
c. 什么是冲突
spring-context.jar 依赖了spring-aop.jar
spring-webmvc.jar 依赖了spring-aop.jar
1、maven自带的调优原则
1. 第一个声明者优先(根据坐标的导入顺序来确定最终使用哪个传递过来的依赖)
2. 路径近者优先(把依赖的jar显示声明到pom文件,就不会用自动引入的)
2、排除依赖
当spring-webmvc和spring-aop同时依赖spring-beans,这时只要在spring-webmvc写exclusions(排除依赖),就不会自动引入jar
3、锁定版本(重点)
采用直接锁定版本的方法确定依赖jar包的存在,版本锁定后则不考虑依赖的声明顺序或依赖的路径,以锁定的版本为准添加到工程中,此方法企业最常用
版本锁定的使用方式
第一步:在dependencyManagement标签中锁定依赖版本
第二步:在dependencies标签中声明需要导入的maven坐标
四、分模块构建工程
1.分析
在现实生活中,汽车厂家进行汽车生产时,由于整个生产过程非常复杂和繁琐,工作量非常大,所以车场都会将整个汽车的部件分开生产,最终再将生产好的部件进行组装,形成一台完整的汽车。
2.继承
在Java语言中,类之间是可以继承的,通过继承,子类就可以引用父类中非 private的属性和方法。同样,在 maven工程之间也可以继承,子工程继承父工程后,就可以使用在父工程中引入的依赖。继承的目的是为了消除重复代码。
实际例子
父工程
子工程
继承过来的jar
3.聚合
实际例子
1.选择聚合其他工程
2.执行命令
3.日志打印成功
4.maven工程聚合(分模块构建)
1.创建父项目,用来管理jar版本,方便操作子工程(父项目一般只有依赖)
目录结构(web注意选择mavenweb骨架)
父目录里子工程
锁定jar版本,当子工程继承的时候,不用写版本号
2.创建子项目
1.聚合2.继承
3.子类pom导入依赖(不用写版本号)
dao依赖pojo,service依赖dao,web依赖service
jar只需要在dao写完,其他都能生效
4.最后控制层东西放到控制层,那个层的东西放到哪里去
注意
classpath和classpath*区别:
classpath:只会到你的class路径中查找找文件。
classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找。
如果不写classpath*,就拿不到其他模块的配置xml文件,就不会注册bean,最后项目运行失败
五、maven私服
5.1 说明
maven仓库分为本地仓库和远程仓库,而远程仓库又分为 maven中央仓库、其他远程仓库和私服(私有服务器)其中,中央仓库是由 maven官方提供的,而私服就需要我们自己搭建了。
maven私服就是公司局域网内的 maven远程仓库,每个员工的电脑上安装 maven软件并目连接 maven私服,程序员
可以将自己开发的项目打成ja并发布到私服,其它项目组成员就可以从私服下载所依赖的jar。私服还充当个代理
服务器的角色,当私服上没有jar包时会从 maven中央仓库自动下载
nexus是一个maven仓库管理器(其实就是个软件), nexus可以充当 maven私服,同时 nexus还提供强大的仓
库管理、构件搜索等功能。
5.2 搭建maven私服
- 下载
- 安装
管理员cmd,到bin文件目录,执行命令nexus.bat install
- 启动
- 运行
启动nexus服务后,访问http://localhost:8081/nexus
默认账号:admin密码:admin123
nexus仓库类型
1和2重点,其他了解
nexus仓库和磁盘目录对应关系
5.3 将项目发布到maven私服
修改maven config(settings.xml)文件
在servers标签里添加账户
<server>
<id>releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
在要上传的项目 pom里写配置文件
<distributionManagement>
<repository>
<id>releases</id>
<url>http://localhost:8081/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
解释一下:
- id:跟上面在setting对应上就可以
- url:跟仓库对应的路径
最后执行部署命令
为什么只上传到快照里,跟版本声明有关系
5.4 从私服下载jar到本地仓库
在settings.xml中配置下载模板
<profile>
<!--profile的id-->
<id>dev</id>
<repositories>
<repository>
<!--仓库id,repositories可以配置多个仓库,保证id不重复-->
<id>nexus</id>
<!--仓库地址,即nexus仓库组的地址-->
<url>http://localhost:8081/nexus/content/groups/public/</url>
<!--是否下载releases构件-->
<releases>
<enabled>true</enabled>
</releases>
<!--是否下载snapshots构件-->
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<!-- 插件仓库,maven的运行依赖插件,也需要从私服下载插件 -->
<pluginRepository>
<!-- 插件仓库的id不允许重复,如果重复后边配置会覆盖前边 -->
<id>public</id>
<name>Public Repositories</name>
<url>http://localhost:8081/nexus/content/groups/public/</url>
</pluginRepository>
</pluginRepositories>
</profile>
在settings.xml激活模板
<activeProfiles>
<activeProfile>dev</activeProfile>
</activeProfiles>
测试
下载一个jar,如果私服有,从私服拿,如果私服没有从中央仓库下载,然后放到私服里面,从私服拿
5.5 将第三jar包安装到maven本地仓库
拿一个oracle的jar测试,因为收费,maven下载不了
cmd(管理员)执行命令
一一对应
mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc5 -Dpackaging=jar -Dfile=ojdbc5.jar -Dversion=11.2.0
查看本地仓库
5.6 将第三jar安装到maven私服
配置maven setting.xml
<server>
<id>thirdparty</id>
<username>admin</username>
<password>admin123</password>
</server>
执行命令
mvn deploy:deploy-file -Dfile=ojdbc5.jar -DgroupId=com.oracle -DartifactId=ojdbc5 -Dversion=11.2.0 -Dpackaging=jar -Durl=http://localhost:8081/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty