Java第四十三天,Maven基础篇(一),走进Maven
一、概念
Maven,专家,内核;是一个项目管理工具;它包含了以下内容:
- 一个项目对象模型 (POM: Project Object Model)
- 一组标准集合
- 一个项目生命周期(Project Lifecycle)
- 一个依赖管理系统(Dependency Management System)
- 一个用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑
二、功能
1.统一管理项目用到的 依赖jar包,防止版本冲突
Maven 会把所有项目的 依赖 jar 包统一放在一个叫做 jar包仓库 的地方;任何项目需要用到 jar包 时,都需要通过 jar包坐标 引入依赖jar包
2.将 java文件 自动编译成 二进制字节码文件,减少人工压力
3.统一管理单元测试,一次性测试需要验证的代码
4.将项目打包,生成报表,部署项目
三、Maven 的安装
1.官网下载安装包
http://maven.apache.org/download.cgi
2.解压压缩包到指定目录(无中文、无空格的路径)
3.配置环境变量
注意:
MAVEN_HOME 是新建,Path 是编辑新增子级条目
- MAVEN_HOME ===> Maven 的解压目录
- Path ===> %MAVEN_HOME%\bin
4.测试是否安装成功
1.进入 cmd 命令框
2.运行 mvn -v 命令
5.目录结构
- bin ===> 可执行文件存放目录;其中的 Mvn.cmd 主要用来构建项目
- boot ===> Maven 自身运行所需要的类加载器
- conf ===> 配置文件存放目录,settings.xml 是 Mavn 项目需要用到的配置文件
- lib ===> Maven 自身运行所依赖的 jar 包
四、Maven 仓库的种类及其关系
1.Maven 仓库的位置
由 apache-maven-3.6.3\conf\setting.xml 文件指定,如下:
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
配置文件指明 Maven 仓库的默认位置为 ${user.home}/.m2/repository;如果需要,可以使用如下标签自定义本地仓库的位置
<localRepository>本地仓库的位置</localRepository>
2.仓库的种类
- 本地仓库 ===> 本机从远程仓库下载的 jar包 形成的jar包仓库
- 远程仓库(私服) ===> 公司为了自身需求,自己搭建的 Maven 仓库
- 中央仓库 ===> 需要联网获取;是 Maven 官网提供的所有开源的 jar包 仓库
3.本地仓库与远程仓库的关系
(1)概述
本地的所有项目第一次用到 Jar 包时,都会通过 maven 软件从远程仓库或中央仓库(因为第一次使用本地仓库是肯定没有已经下载好的依赖包的)下载 jar 包并存在本地仓库,本地仓库 就是本地文件夹,当第二次需要此 jar 包时则不再从远程仓库下载,因为本地仓库已经存在了,可以将本地仓库理解为缓存,有了本地仓库就不用每次从远程仓库下载了
(2)顺序
在默认请求下,启动一个 Maven 工程,会首先从 本地仓库 找jar依赖包;
若本地仓库没有,且所在公司有私服,则再次通过私服寻找 jar依赖包,若私服也没有,最后从中央仓库寻找 jar依赖包;
若本地仓库没有,且所在公司没有私服,则直接从中央仓库寻找 jar 依赖包
(3)图解
(4)读者福利
笔者有一个本地仓库,里面放了一些常用的 jar依赖包,这里就当作礼品送给大家了
https://download.csdn.net/download/ITlanyue/12727820
五、Maven标准目录结构
- src/main/java ===> 核心代码部分
- src/main/resources ===>配置文件部分
- src/main/webapp ===> web资源;如页面资源、js、css、图片资源 ......
- src/test/java ===> 测试代码部分
- src/test/resources ===> 测试配置文件部分
- target —— 项目输出位置,编译后的 class 文件会输出到此目录
- pom.xml——maven 项目核心配置文件
注意:如果是普通的 java 项目,那么就没有 webapp 目录,只有 web 项目才会有
六、Maven常用命令
- mvn clean ===> 清除项目编译产生的数据;删除 target 目录,导入项目时需要用到(每个人电脑的开发环境不一定相同)
- mvn compile ===> 将项目中 src/main/java 目录下面的Java代码进行编译,生成 target 目录,并且生成相关核心代码的字节码文件
- mvn test ===> 完成 mvn compile 功能后,又将项目中 src/test/java 目录下面的Java代码进行编译,生成 target 目录,并且生成测试代码的相关字节码文件
- mvn package ===> 打包;完成 mvn compile 和 mvn test 功能后,根据项目中 pom.xml 配置文件的 <packaging/>标签,将项目打包成相应的格式
- mvn install ===> 安装;完成 mvn compile 和 mvn test 和 mvn package 功能后,又将打包后的包安装到了本地仓库
- mvn deploy ===> 发布;需要进行额外的配置后,才可以执行该命令
七、Maven生命周期
maven 对项目构建过程分为三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”,这三套生命周期分别是:
- Clean Lifecycle ===> 清理生命周期;在进行真正的构建之前进行一些清理工作
- Default Lifecycle ===> 默认生命周期;构建的核心部分,编译,测试,打包,部署等等
- Site Lifecycle ===> 站点生命周期;生成项目报告,站点,发布站点
八、Maven概念模型
1.项目对象模型 (Project Object Model)
一个 maven 工程都有一个 pom.xml 文件,通过 pom.xml 文件定义项目的坐标、项目依赖、项目信息、项目运行环境信息、插件目标等
2.依赖管理系统(Dependency Management System)
通过 maven 的依赖管理对项目所依赖的 jar 包进行统一管理
<!-- 依赖关系 -->
<dependencies>
<dependency>
<!--项目名称 -->
<groupId>项目名称</groupId>
<!--模块名称 -->
<artifactId>项目中的模块名称</artifactId>
<!-- 版本 -->
<version>版本号</version>
<!-- 依赖范围:单元测试 -->
<scope>test</scope>
</dependency
......
</dependencies>
3.一个项目生命周期(Project Lifecycle)
使用 maven 完成项目的构建,项目构建包括:清理、编译、测试、部署等过程, maven 将这些过程规范为一个生命周期,maven 通过执行一些简单命令即可实现上边生命周期的各各过程,比如执行 mvn compile 执行编译、执行 mvn clean 执行清理......
生命周期的各阶段:
4.一组标准集合
maven 将整个项目管理过程定义一组标准,比如:通过 maven 构建工程有标准的目录结构,有标准的生命周期阶段、依赖管理有标准的坐标定义等
5.插件(plugin)目标(goal)
maven 管理项目生命周期过程都是基于插件完成的;每一次构建项目,Maven 底层都会有一个插件在工作,每一个构建项目的命令都对应着 Maven 底层的一个插件