Maven入门
本文最后更新于:2021年8月31日 晚上
在实际开发中,我们会不可避免的使用各种各样的 Jar 包。为了避免每次都要手动复制 Jar 包的麻烦,Maven出现了。-d
Maven是一种项目管理工具,官方是这么定义的。简单来说呢 Maven 主要是为了在项目中实现自动导包的功能。当然实际上它不止可以做这些。
项目构建
在官方的定义中,maven 的项目构建分别是:清理、编译、打包、测试、报告、打包、安装、部署。这样理解会有一定抽象。
- 清理,就是清理先前的编译结果,为下一次编译做准备。
- 编译,主要是把
java
文件变成class
文件,这个工作就和编译器干得差不多。 - 测试,对代码进行测试。
- 报告,显示测试结果。
- 打包,测试通过的项目工件封装成 jar 或者 war 包。
- 安装,将打好的包安装到本地仓库中。
- 部署,打好的包部署到服务器中。
简单来说 mavne 的核心功能还是管理 jar 包,自动测试,和发布(部署)项目。
- 约定大于配置
Maven安装与使用
安装Maven
- 在Apatch 官网下载最新的 Maven 工具。
- 解压 Maven 到某个文件夹
- 配置 Maven 环境变量
MAVEN_HOME
环境变量,指向 Mavne 的安装目录M2_HOME
环境变量,指向 Maven 安装目录下的bin
目录。path
变量中添加指向M2_HOME
变量。
- cmd中测试使用
mvn -version
命令测试是否安装成功。
配置Maven仓库
上面提到过 Maven 有一个中心仓库的概念,这个中心仓库,可以是远程,也可以是在本地,先配置一个本地仓库。我们把本地仓库放到 Maven 安装目录中。
- 在 Maven 安装目录下新建一个
maven-re
文件夹,这个文件夹作为我们的本地仓库 - 在 Maven 安装目录下的
conf
里有个settings.xml
文件,在里面加入这样我们的本地仓库就算建好了。1
<localRepository>apache-maven-3.8.1\maven-re</localRepository>
远程仓库镜像
如果需要,还可以配置一个远程仓库镜像加快下载 Jar 包的速度
在上面的settigns.xml
文件的
1 |
|
约定目录结构
Maven 中遵循约定大于配置的规定,所以我们的 Maven 项目都需要遵循这样一个目录结果:
1 |
|
Maven 项目启动时会先读取 pom.xml 获取项目信息,然后允许 main 目录下的主程序。
Maven的使用
我们先通过命令行来使用Maven
- 先按照上面的目录结构建好一个 Maven 项目,并在 java 中随意编写一个 class,并编写一个 pom.xml 文件。
- 在项目根目录,也就是 src 同级的目录使用 cmd 命令
mvn compile
构建 maven 项目 - 构建结束后,项目根目录会生成一个名为 ‘target’ 的文件夹,它就是 maven 为我们编译好的结果。
- 在 target 的子目录 classes 中 执行 java 命令运行类以测试项目。
Idea 中 Maven 的使用
Idea中内置了Maven,不过我们前面都自己下好了一个,肯定是用我们自己的Maven。
我们需要在Idea->File->Settings->Build->BuildTools->Maven
中,把Maven的home path
和local repository
改成我们刚刚配置的。
新建项目测试
Maven配置完成后,下一步开始新建项目测试,直接新建一个Maven项目,选择maven-archetype-webapp
,然后注意选择Maven版本时选择我们刚刚配置好的Maven版本就行了。
添加 Maven 依赖
因为要用到servlet,所以我们还需要添加servlet的依赖
1 |
|
配置完后,就能直接新建servlet啦。
Maven核心概念
Maven有一些核心名词,先了解一下:
- pom : 项目对象模型,maven 把一个项目当成一个模型使用
- 坐标:一个用来表示项目资源位置的字符串
- 依赖管理:就是管理各种 jar 包之间的依赖关系
- 仓库管理:管理远程仓库或者本地仓库,仓库用来放各种 jar 包
- 生命周期:整个项目构建的流程就是一个生命周期
- 插件和目标:maven 中使用插件(就是jar)来实现某个功能,一个单独的生命周期过程就是一个目标
- 继承:maven 父子项目
- 聚合:合并多个小项目
仓库
Maven 通过仓库来进行依赖管理,依赖管理是指管理各种 jar 包,这其中有 Maven 用来构建项目的 jar,也有我们项目自己依赖的 jar。
仓库分为远程仓库和本地仓库,构建项目需要 jar 包时,先在本地仓库找,找不到就去远程仓库找。
远程仓库其实还可以分为,中央仓库,中央仓库镜像,和本地的局域网仓库。
pom文件
在 Maven 中是把一个项目看成一个模型就行配置的,所以对项目的大部分操作都是体现在 pom 文件当中的。我们先来看一个简单的 pom 文件格式。
1 |
|
坐标
任何一个 Maven 项目都必须要有它自己的坐标,坐标则用来标识项目,有点类似于数据库中的主键。
Maven 项目的坐标由这三个标签组成
1 |
|
另外,坐标在仓库中的体现就是文件夹的目录结构。
依赖
当我们的项目需要使用别的 jar 包时,我们就直接的 pom 中写入依赖项,然后 maven 在构建项目时会自动帮我们去加载 jar 到我们的项目中。
1 |
|
生命周期、命令
前面所说的项目构建的几个步骤就是 Maven 项目的生命周期,其中的单独一个步骤,就是一个生命周期。
前面通过命令完成了项目的构建,当然还有更多的命令,这些命令都是通过插件完成的,也就是 jar 包。
1 |
|
测试项目
测试项目会测试类中的每一个方法,方法就是测试的最小单元,所有又叫单元测试。我们通过 junit.jar 插件来进行单元测试。
1 |
|
推荐在测试类名和测试方法前都加上Test
。
测试方法也有定义规则,
- 方法是public
- 方法无返回值
- 方法加上注解@Test