Maven和Web入门(三)
Maven
Apache Maven是apache旗下的一个开源项目,是 一个(特别是Java编程)项目管理及自动构建工具,它基于项目对象模型(POM,project object model)的概念,通过一小段描述信息来管理项目的构建。
官方网站:https://maven.apache.org/
作用
- 方便的依赖管理:方便快捷的管理项目依赖的资源(jar包),避免版本冲突问题
- 统一的项目结构:提供标准,统一的项目结构
- 标准的项目构建:标准跨平台(Linux,Windows,MacOS)的自动化项目构建方式
仓库
仓库:用于存储资源,包含各种jar包。
- 本地仓库:自己计算机上的一个目录,连接远程仓库获取资源
- 远程仓库:非本机上的仓库,为本地仓库提供资源
- 中央仓库:由maven团队维护的全球唯一的。
- 私服:一般由公司团队搭建的私有仓库,从中央仓库获取资源。作用如下:
- 中央仓库中的jar都是开源的,不能存储具有版权的资源。私服可保存具有版权的资源,包含购买或自主研发的jar。
- 一定范围内共享资源,仅对内部开放
坐标
Maven中坐标是资源的唯一标识,通过该坐标可以唯一定位资源位置。
使用坐标来定义项目或引入项目中需要的依赖。
Maven坐标的主要组成:
groupId:组织id,定义当前Maven项目隶属组织名称(通常是域名反写)
artifactId:项目id,定义当前Maven项目名称
version:版本号,定义当前项目版本号
例:
1 | <groupId>ch.qos.logback</groupId> |
依赖
依赖:指当前项目运行所需要的的jar包,一个项目可以引入多个依赖。
依赖配置
- 在pom.xml中填写标签dependencies
- 在dependencies标签中使用dependency引入坐标
- 定义坐标的groupId,artifactId,version
- 点击刷新按钮,引入最新加入的坐标
注意事项:
- 若引入的依赖,在本地仓库中不存在,将会连接远程仓库/中央仓库,然后下载资源
- 若不知道依赖的坐标信息,可以到https://mvnrepository.com/中搜索
依赖传递
依赖具有传递性。
- 直接依赖:在当前项目中通过依赖配置建立的依赖关系
- 间接依赖:被依赖的资源中若依赖其他资源,当前项目简介依赖其他资源
- 排除依赖:排除依赖指主动断开依赖的资源,被排除的资源无需指定版本
- exclusions 标签中使用exclusion
- 可选依赖:指对外隐藏当前所依赖的资源–不透明
- option标签的内容为true
依赖传递冲突问题:
- 路径优先:当依赖中出现相同资源时,层级越深,优先级越低,层级越浅,优先级越高
- 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
- 特殊优先:当同级配置相同资源的不同版本,后配置的覆盖先配置的
依赖范围
依赖的jar包,默认情况下,可在任何地方使用,可以通过scope标签设置其作用范围。
作用范围:
- 主程序范围有效(main文件夹范围内)
- 测试程序范围有效(test文件夹范围内)
- 是否参与打包运行(package指令范围内)
scope值:
- compile(默认)
- 主程序有效
- 测试程序有效
- 打包(运行)有效
- test
- 主程序无效
- 测试程序有效
- 打包(运行)无效
- provided
- 主程序有效
- 测试程序有效
- 打包(运行)无效
- runtime
- 主程序无效
- 测试程序无效
- 打包(运行)有效
例:
1 | <dependency> |
生命周期
maven的生命周期就是为了对所有的maven项目构建过程进行抽象和统一。
在同一套生命周期里,当运行后面的阶段时,前面的阶段都会运行
常用生命周期:
- clean:溢出上一次构建生成的文件(target文件夹)
- compile:编译项目源代码
- test:使用合适的单元测试进行测试(junit)
- package:将编译后的文件打包,如:jar,war等
- install:安装项目到本地仓库
执行指定生命周期的方式
- 在idea中,右侧maven栏,选中对应的生命周期,双击运行
- 在命令行中,通过命令执行,例如:mvn compile
起步依赖
- spring-boot-starter-web
- 包含web应用开发所需要的常见依赖
- spring-boot-starter-test
- 包含单元测试所需要的常见依赖
分模块设计
分模块设计:将项目按照功能拆分成若干个子模块,方便项目的管理维护,扩展,也方便模块间的相互调用,资源共享
注:分模块设计需先针对模块功能进行设计,再进行编码。不会先将工程开发完毕,然后进行拆分
聚合
作用:聚合用于快速构建maven工程,一次性构建多个项目/模块。
制作方式:
创建一个空模块,打包类型定义为pom
1 | <packaging>pom</packaging> |
定义当前模块进行构建操作时关联的其他模块名称
1 | <modules> |
注:参与聚合操作的模块最终执行顺序与模块间的依赖关系有关,与配置顺序无关
继承
作用:通过继承可以实现在子工程中沿用父工程的配置,maven中的继承与java中的继承相似,在子工程中配置继承关系。
制作方式:
1 | 在子工程中声明其父工程坐标与对应的位置 |
属性
类型:
- 自定义属性
- 内置属性
- Setting属性
- Java属性
- 环境变量属性
自定义属性
等同于定义变量,方便统一维护
定义格式:
1 | <properties> |
调用格式:
1 | <dependency> |
内置属性
使用maven内置属性,快速配置
调用格式:
1 | ${basedir} |
Setting属性
使用maven配置文件setting.xml中的标签属性,用于动态配置
1 | ${setting.localRepository} |
Java系统属性
读取java系统属性。
调用格式:
1 | ${user.home} |
系统属性查询方式:
1 | mvn help:system |
环境变量属性
读取maven配置文件setting.xml中的标签属性,用于动态配置。
1 | ${env.JAVA_HOME} |
环境变量属性查询方式:
1 | mvn help:system |
版本管理
- SNAPSHOT(快照版本)
- 项目开发过程中,为方便团队队员合作,解决模块间相互依赖和时时更新的问题,开发者对每个模块进行构造时,输出的临时版本叫快照版本(测试阶段版本)
- 快照版本会随着开发的进展不断更新
- RELEASE(发布版本)
- 项目开发到进入阶段里程碑后,向团队外部发布比较稳定的版本,此版本所对应的构件文件是稳定的,即使进行功能的后续开发,也不会改变当前发布版本内容,这种版本成为发布版本
工程版本号约定:
- 约定规范
- 主版本.次版本.增量版本.里程碑版本
- 主版本:表示项目重大架构的变更,如:spring5对于spring4的迭代
- 次版本:表示有较大的功能增加和变化,或全面系统地修复漏洞
- 增量版本:表示有重大漏洞的修复
- 里程碑版本:表名一个版本的里程碑(版本内部)。这样的版本同下一个正式版本相比,相对来说不是很稳定,有待更多的测试
- 范例
- 5.1.9.RELEASE
资源配置
配置文件引用pom属性。
调用格式:
1 | ${jdbc.url} |
开启配置文件加载pom属性:
1 | <!--配置资源文件加载pom属性--> |
多环境配置
maven提供配置多种环境的设定,帮助开发者使用过程中快速切换环境。
定义多环境
1 | <!--创建多环境--> |
使用多环境(构建过程)
1 | mvn 指令 -P 环境定义id |
HTTP协议
概念:Hyper Text Transfer Protocol,超文本传输协议,规定浏览器和服务器之间数据传输的规则。
特点:
- 基于TCP协议:面向连接,安全
- 基于请求-响应模型的:一次请求对应一次响应
- HTTP协议是无状态的协议:对于事物处理没有记忆能力,每次请求-响应都是独立的
- 缺点:多次请求间不能共享数据
- 优点:速度快
请求协议
HTTP请求数据格式:
- 请求行:请求数据第一行,包括请求方式,资源路径,协议
- 请求头:第二行开始,格式key:value
- 请求体:POST请求,存放请求参数
注:
- 请求方式GET
- 请求参数在请求行中,没有请求体
- 请求方式POST
- 请求参数在请求体中,POST请求大小是没有限制的
响应协议
HTTP响应格式:
- 响应行:响应数据第一行(协议,状态码,描述)
- 响应头:第二行开始:格式key:value
- 响应体:最后一部分,存放相应数据
Tomcat
web服务器:对HTTP协议操作进行封装,简化web程序开发,部署web项目,对外提供网上信息浏览服务。
Tomcat:一个轻量级的web服务器,支持servlet,jsp等少量的javaEE规范,也被称为web容器,servlet容器。
官网下载地址:https://tomcat.apache.org/download-90.cgi
卸载:直接删除tomcat目录。
启动:进入bin\startup.bat。
若控制台中文出现乱码:
1 | 则修改文件conf/logging.properties。 |
关闭:
- 直接x掉运行窗口:强制关闭
- shutdown.bat正常关闭
- Ctrl+C正常关闭
配置Tomcat端口号:
1 | conf/server.xml |
HTTP协议默认端口号为80,若将Toncat端口号改为80,则将来访问Tomcat时,将不用输入端口号。
部署:应用复制到webapps目录
内嵌Tomcat服务器
基于Springboot开发的web应用程序,内置tomcat服务器,当启动类运行时,会启动内嵌的tomcat服务器。