介绍:
web后端开发技术
ApacheMaven是一个项目管理和构建工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建。
安装:http://maven.apache.org/
Apache软件基金会,成立于1999年7月,是目前世界上最大的最受欢迎的开源软件基金会,也是一个专门为支持开源项目而生的非盈利性组织。
开源项目:https://www.apache.org/index.html#projects-list
Maven的作用?
- 依赖管理:可以快捷的管理jar包,
- 统一项目结构:使得同一个java项目,可以在不同的平台迁移,
- 项目构建:
概述:
Maven坐标
- 什么是坐标?
- Maven中的坐标是资源的唯一标识,通过改坐标可以唯一定位资源位置
- 可以使用坐标来定义项目或引入项目中所需要的依赖
- 坐标组成
- groupld:定义当前Maven项自隶属组织名称
- artifactld:定义当前Maven项目名称(通常是模块)
- version:定义当前项自版本号
Maven模型
- 项目对象模型 (Project Object Model)
- 依赖管理模型(Dependency)
- 构建生命周期/阶段(Build lifecycle & phases)
1). 构建生命周期/阶段(Build lifecycle & phases)
以上图中紫色框起来的部分,就是用来完成标准化构建流程 。当我们需要编译,Maven提供了一个编译插件供我们使用;当我们需要打包,Maven就提供了一个打包插件供我们使用等。
2). 项目对象模型 (Project Object Model)
以上图中紫色框起来的部分属于项目对象模型,就是将我们自己的项目抽象成一个对象模型,有自己专属的坐标,如下图所示是一个Maven项目:
这里还未添加依赖,
添加后如图:
坐
3). 依赖管理模型(Dependency)
以上图中紫色框起来的部分属于依赖管理模型,是使用坐标来描述当前项目依赖哪些第三方jar包:
如图:
之前我们项目中需要jar包时,直接就把jar包复制到项目下的lib目录,而现在书写在pom.xml文件中的坐标又是怎么能找到所要的jar包文件的呢?
Maven有一个仓库,专门存放jar包,不需手动导入了
Maven仓库
仓库:用于存储资源,管理各种jar包
仓库分类:
本地仓库:自己计算机上的一个目录
中央仓库:由Maven团队维护的全球唯一的。仓库地址:仓库 Maven仓库
远程仓库(私服):一般由公司团队搭建的私有仓库
当项目中使用坐标引入对应依赖jar包后,首先会查找本地仓库中是否有对应的jar包
- 如果有,则在项目直接引用
- 如果没有,则去中央仓库中下载对应的jar包到本地仓库
如果还可以搭建远程仓库(私服),将来jar包的查找顺序则变为: 本地仓库 --> 远程仓库–> 中央仓库
IDEA集成Maven
- 配置Maven环境
- 创建Maven项目
- 导入Maven项目
见资料,
依赖管理:
依赖配置
依赖:指当前项目运行所需要的jar包,一个项目中可以引入多个依赖
配置:
- 在pom.xml 中编写标签
- 在标签中使用引入坐标
- 定义坐标的grould,artifactId,version
- 点击刷新按纽,引入最新加入的坐标
配置完记得刷新一下
如果引入的依赖,在本地仓库不存在,将会连接远程仓库/中央仓库,然后下载依赖
如果不知道依赖的坐标信息,可以到Maven仓库中搜索。
依赖传递
早期我们没有使用maven时,向项目中添加依赖的jar包,需要把当前jar包的依赖都复制到项目工程下。非常麻烦
但是有了maven,它有依赖传递的特性:
- 依赖具有传递性
- 直接依赖:在当前项目中通过依赖配置建立的依赖关系
- 简洁依赖:被依赖的资源如果依赖其他资源,则当前项目间接依赖其他资源
排除依赖:
排除依赖指主动断开依赖的资源,被排除的找资源无序指定版本
排除后:
依赖范围
依赖的jar包,默认情况下,可以下任何地方使用。可以使用…设置其作用范围
作用范围的分类:
- 主程序范围有效(main文件夹内)
- 测试程序范围有效。(test文件夹范围内)
- 是否参与打包运行。(package)
scope值:
compile:
main中:可调用jar包中的内容
Test中:可调用jar包中的内容
Test:只能在测试程序范围有效
其他范围一样…
生命周期
Maven的生命周期就是为了对所有的maven项目构建过程进行抽象和统一。
Maven中有三套相互独立的生命周期:
- clearn:清理工作
- default:核心工作,如:编译、测试、打包、安排、部署等。
- site:生成报告、发布战点等。
重点掌握:
test测试时我们依赖junit来测试
在同一套生命周期中,当运行后面的阶段时,前面的阶段都会运行。
如执行install时也会执行compile、test…
执行生命周期:
方式一:在idea中右侧的maven工具栏,选择
方式二:通过命令行执行
演示:
compile
test:
package
install
clean:
方式二:
进入模块
打开cmd
package:
但是有报错问题
![57KaTeX parse error: Expected 'EOF', got '}' at position 8: GZC0W95}̲Y[0N]R)]E3G.png](https://img-blog.csdnimg.cn/img_convert/49a41c6e87a7be8309a0c11a2ef9750b.png)
之前导入的maven模块,也无法执行生命周期,考虑是groupId的问题