【框架】Maven
学习目标
- 理解分模块开发的意义
- 能够使用聚合工程快速构建项目
- 能够使用继承简化项目配置
- 能够根据需求配置生产、开发、测试环境,并在各环境间切换运行
分模块开发与设计
分模块开发步骤
- 创建Maven模块
- 书写模块代码
- maven模块依赖
- 通过maven指令安装模块到本地仓库 (install指令)
依赖管理
直接依赖和间接依赖(依赖的依赖)(具有传递性:工程可以使用间接依赖)
当两个依赖有共同的直接依赖,会产生冲突 → 依赖传递冲突问题
依赖传递冲突
- 路径优先:当依赖中出现相同的资源时,层级越深优先级越低,层级越浅,优先级越高
- 声明优先:当资源在相同层级被依赖时,配置顺序考前的覆盖配置顺序靠后的
- 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的
依赖关系图
可选依赖与排除依赖
可选依赖
可选依赖是隐藏当前工程依赖的资源,隐藏后对应资源将不具有依赖传递性——不透明
理解:就是不想让开发人员看见使用依赖的间接依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.10.RELEASE</version>
<!--设置依赖可选-->
<optional>true</optional>
</dependency>
排除依赖
排除依赖指主动断开依赖的资源,被排除的资源无需指定版本——不需要
理解:使用该依赖但不使用该依赖中的某个间接依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.10.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.apache.servicemix.bundles</groupId>
<artifactId>org.apache.servicemix.bundles.spring-aop</artifactId>
</exclusion>
</exclusions>
</dependency>
聚合与继承
聚合
问题:多个模块依赖某个模块时,被依赖的模块被改动后,其他模块会受影响
解决:因此可以单独建立一个管理模块
实操
1.管理模块打包方式:pom
工程 | 默认打包方式 |
---|---|
默认 | jar |
Web | war |
管理模块 | pom |
2.设置管理的模块列表 |
<modules>
<module>../maeven_02_ssm</module>
<module>../maeven_03_pojo</module>
<module>../maeven_04_dao</module>
</modules>
继承
- 概念:继承描述的时两个工程间的关系,与java中的继承相似,子工程可以继承父工程中的配置信息,常见于依赖关系的继承
- 作用:
- 简化配置
- 减少版本冲突
步骤
聚合和继承的区别
- 作用
- 聚合用于快速构建项目
- 继承用于快速配置
- 相同点
- 聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom.xml文件中
- 聚合与继承均属于设计型模块,并无实际的模块内容
- 不同点
- 聚合是在当前模块中配置关系,聚合可以感知到参与聚合的模块有哪些
- 继承是在子模块配置关系,父模块无法感知哪些子模块继承了自己
属性管理
属性(就是变量,统一某些依赖的相同版本)
配置文件加载属性(便于集中配置,把配置文件如jdbc.properties也在pom.xml中管理)
步骤
<!--工程内所有子工程所在的指定包-->
<directory>${project.basedir}/src/main/resoreces</directory>
<!--就是为了能够识别${},${basedir}工程内置的系统属性-->
<filterubf>true</filterubf>
其他属性
查看一些系统属性
- 命令提示符 到 maven安装路径下 (...\bin)
- mvn help:system
版本管理
MVN官网 需要VPN
https://mvnrepository.com/
多环境配置
多环境开发
跳过测试
应用场景:
- 部分模块没有开发完全 需要跳过测试 准备上线
- 快速打包
- ...
方法
- 全部跳过
- 指定
私服
简介
https://help.sonatype.com/repomanager3/product-information/download
下载有点慢,这里有百度网盘的链接
链接:https://pan.baidu.com/s/1KY-2t889vz8ifaPjvTvnKA
提取码:1234
Nexus的使用
开启流程
- 位置D:\Nexus\latest-win64\nexus-3.20.1-01\bin
- 路径区域 输入cmd回车
- 输入
nexus.exe /run nexus
,回车
- 浏览器搜索http://localhost:8081
- 右上角Sign up登录
- 用户名 admin(默认的) 密码 根据提示找到Nexus\latest-win64\sonatype-work\nexus3下的admin.password文件,查看密码,Sign up
- Next
- 设置新密码,Next
- 勾选 Enable anonymous access(允许匿名访问),Next
- finish
使用界面
私服仓库分类
私服操作流程分析
私服仓库分类
资源上传与下载
访问私服配置(本地仓库访问私服)
- 配置本地仓库访问私服的权限(maven路径下conf文件夹中的setting.xml)
<servers>
<server>
<id>heima-release</id>
<username>admin</username>
<password>admin</password>
</server>
<server>
<id>heima-snapshots</id>
<username>admin</username>
<password>admin</password>
</server>
</servers>
其中
id
指私服中的服务器id名称
暂时还不知道
获取私服中服务器id
- 查看仓库
- 创建两个仓库
- 第一个仓库 snapshot
- 第二个仓库 release
- 配置本地仓库资源来源(setting.xml)
- 找到mirrors标签
- name标签可以不用写
- id,仓库组id
- mirrorOf,直接写*,表示所有东西
- url
- 配置结果
<mirrors>
<mirror>
<id>nexus-heima</id>
<mirrorOf>*</mirrorOf>
<url>http://localhost:8081/repository/maven-public/</url>
</mirror>
</mirrors>
访问私服配置(项目工程访问私服,idea,管理模块的pom.xml中)
- 配置当前项目访问私服上传资源的保存位置(pom.xml)
<distributionManagement>
<!--正式版仓库-->
<repository>
<id>heima-release</id>
<url>http://localhost:8081/repository/heima-release/</url>
</repository>
<!--临时版仓库-->
<snapshotRepository>
<id>heima-snapshots</id>
<url>http://localhost:8081/repository/heima-snapshots/</url>
</snapshotRepository>
</distributionManagement>
- 发布资源到私服命令
mvn deploy
install和deploy区别
发布的版本,都会留下来,不会主动删除
配置从阿里镜像过来