笔记根据此视频完成
个人博客链接:https://www.qingbo1011.top/ 点击此处前往
Maven
Maven 翻译为"专家"、“内行”,是 Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。
Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。
Maven 也可被用于构建和管理各种项目,例如 C#,Ruby,Scala 和其他语言编写的项目。Maven 曾是 Jakarta 项目的子项目,现为由 Apache 软件基金会主持的独立 Apache 项目。
Maven 是一个项目管理工具,它包含着:
- 一个项目对象模型 (POM:Project Object Model)
- 一组标准集合
- 一个项目生命周期(Project Lifecycle)
- 一个依赖管理系统(Dependency Management System)
- 用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑
Maven优势举例
举个例子:
Maven的两个重要作用
- 依赖管理
- 项目的一键构建
依赖管理
Maven 的一个核心特性就是依赖管理。当我们涉及到多模块的项目(包含成百个模块或者子项目),管理依赖就变成一项困难的任务。Maven 展示出了它对处理这种情形的高度控制。
依赖管理:Maven过程对jar包的管理过程
maven 工程中不直接将 jar 包导入到工程中,而是通过在 pom.xml 文件中添加所需 jar包的坐标,这样就很好的避免了 jar 直接引入进来,在需要用到 jar 包的时候,只要查找 pom.xml 文件,再通过 pom.xml 文件中的坐标,到一个专门用于”存放 jar 包的仓库”(maven 仓库)中根据坐标从而找到这些 jar 包,再把这些 jar 包拿去运行。
项目的一键构建
我们的项目,往往都要经历编译、测试、运行、打包、安装 ,部署等一系列过程。
构建:项目从编译、测试、运行、打包、安装 ,部署整个过程都交给 maven 进行管理,这个
过程称为构建一键构建:整个构建过程,使用 maven 一个命令可以轻松完成整个工作
Maven安装
Maven的安装、环境变量配置以及配置文件的相关修改网上有很多教程
Maven仓库
maven 的工作需要从仓库下载一些 jar 包。比如说:本地的项目 A、项目 B 等都会通过 maven软件从远程仓库(可以理解为互联网上的仓库)下载 jar 包并存在本地仓库,本地仓库就是本地文件夹,当第二次需要此jar包时则不再从远程仓库下载,因为本地仓库已经存在了,可以将本地仓库理解为缓存,有了本地仓库就不用每次从远程仓库下载了。
Maven的三种仓库:
- 本地仓库 :用来存储从远程仓库或中央仓库下载的插件和 jar 包,项目使用一些插件或 jar 包,
优先从本地仓库查找(默认本地仓库位置在${user.dir}/.m2/repository
,${user.dir}
表示 windows 用户目录) - 私服仓库(远程仓库):一般来说是公司内部搭建的 Maven 私服,处于局域网中,访问速度较快,这个仓库中存放的 jar 一般就是公司内部自己开发的 jar。如果本地需要插件或者 jar 包,本地仓库没有,默认去远程仓库下载()
- 中央仓库 :在 maven 软件中内置一个远程仓库地址 http://repo1.maven.org/maven2 ,它是中央仓库,服务于整个互联网,它是由 Maven 团队自己维护,里面存储了非常全的 jar 包,它包含了世界上大部分流行的开源项目构件。(一般我们要再setting.xml文件中将地址修改为阿里云镜像地址)
jar包查找仓库顺序:
全局 setting 与用户 setting:maven 仓库地址、私服等配置信息需要在 setting.xml 文件中配置,分为全局配置和用户配置。
在 maven 安装目录下的有 conf/setting.xml 文件,此 setting.xml 文件用于 maven 的所有 project项目,它作为 maven 的全局配置。
如需要个性配置则需要在用户配置中设置,用户配置的 setting.xml 文件默认的位置在:
${user.dir} /.m2/settings.xml
目录中,${user.dir}
指 windows 中的用户目录。maven 会先找用户配置,如果找到则以用户配置文件为准,否则使用全局配置文件。
构建配置文件大体上有三种类型:
类型 | 在哪定义 |
---|---|
项目级(Per Project) | 定义在项目的POM文件pom.xml中 |
用户级 (Per User) | 定义在Maven的设置xml文件中 (%USER_HOME%/.m2/settings.xml) |
全局(Global) | 定义在 Maven 全局的设置 xml 文件中 (%M2_HOME%/conf/settings.xml) |
Maven工程目录结构
Maven工程标准目录结构如下:
作为一个 maven 工程,它的 src 目录和 pom.xml 是必备的
进入 src目录下的目录结构如下:
- src/main/java:存放项目的.java 文件
- src/main/resources:存放项目资源文件,如 spring, hibernate 配置文件
- src/test/java:存放所有单元测试.java 文件,如 JUnit 测试类
- src/test/resources:测试资源文件
- src/main/webapp:页面资源,js,css,图片等等
- target:项目输出位置,编译后的 class 文件会输出到此目录
- pom.xml:maven 项目核心配置文件
注意:如果是普通的 java 项目,那么就没有 webapp 目录
Maven常用命令
Maven 中有一些常见的命令(如果使用 IDEA 的话,可以不用命令,直接点点点就可以了):
常用命令 | 中文含义 | 说明 |
---|---|---|
mvn clean | 清理 | 这个命令可以用来清理已经编译好的文件 |
mvn compile | 编译 | 将 Java 代码编译成 Class 文件 |
mvn test | 测试 | 项目测试 |
mvn package | 打包 | 根据用户的配置,将项目打成 jar 包或者 war 包 |
mvn install | 安装 | 手动向本地仓库安装一个 jar |
mvn deploy | 上传 | 将 jar包(或war包)上传到私服 |
这里需要注意的是,这些命令都不是独立运行的,它有一个顺序。举个简单例子:
我想将 jar 上传到私服,那么就要构建 jar,就需要执行 package 命令,要打包,当然也需要测试,那就要走 mvn test 命令,要测试就要先编译…因此,最终所有的命令都会执行一遍。不过,开发者也可以手动配置不执行某一个命令,这就是跳过。一般来说,除了测试,其他步骤都不建议跳过。
Maven生命周期
Maven 对项目构建过程分为三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”,这三套生命周期分别是:
- Clean Lifecycle(清理生命周期):在进行真正的构建之前进行一些清理工作
- Default Lifecycle(默认生命周期):构建的核心部分,编译,测试,打包,部署等等
- Site Lifecycle(站点生命周期):生成项目报告,站点,发布站点
Maven概念模型
上面已经说到了:
Maven 是一个项目管理工具,它包含着:
-
项目对象模型 (POM:Project Object Model):每个 maven 工程都有一个 pom.xml 文件,通过 pom.xml 文件定义项目的坐标、项目依赖、项目信息、插件目标等。
-
标准集合:maven 将整个项目管理过程定义一组标准。比如:通过 maven 构建工程有标准的目录结构,有标准的生命周期阶段、依赖管理有标准的坐标定义等。
-
项目生命周期(Project Lifecycle):使用 maven 完成项目的构建,项目构建包括:清理、编译、测试、部署等过程,maven 将这些过程规范为一个生命周期。maven 通过执行一些简单命令即可生命周期的各个过程,比如执行
mvn compile
执行编译、执行mvn clean
执行清理。 -
依赖管理系统(Dependency Management System):通过 maven 的依赖管理对项目所依赖的 jar 包进行统一管理。比如:项目依赖 junit4.9,通过在 pom.xml 中定义 junit4.9 的依赖即使用 junit4.9,在pom.xml中进行依赖定义如下: