Maven 的九个核心概念:
①POM ②约定的目录结构 ③坐标 ④依赖管理 ⑤仓库管理 ⑥生命周期 ⑦插件和目标 ⑧继承 ⑨聚合
3.1 POM
Project Object Model:项目对象模型。将 Java工程的相关信息封装为对象作为便于操作和管理的模型。 Maven 工程的核心配置。可以说学习 Maven 就是学习 pom.xml 文件中的配置。
3.2约定的目录结构
约定的目录结构对于 Maven 实现自动化构建而言是必不可少的一环,就拿自动编译来说,Maven 必须能找到 Java 源文件,下一步才能编译,而编译之后也必须有一个准确的位置保持编译得到的字节码文件。
在开发中普遍认为:约定>配置>编码。
意思就是能用配置解决的问题就不编码,能基于约定的就不进行配置。而 Maven 正是因为指定了特定文件保存的目录才能够对我们的 Java 工程进行自动化构建。
我们在开发中如果需要让第三方工具或框架知道我们自己创建的资源在哪,那么基本上就是两种方式:
①通过配置的形式明确告诉它
②基于第三方工具或框架的约定
Maven 对工程目录结构的要求就属于后面的一种。
3.3坐标
Maven使用如下三个向量坐标(GAV)在 Maven 的仓库中唯一的确定一个 Maven 工程。
[1]groupid:公司或组织的域名倒序+当前项目名称
[2]artifactId:当前项目的模块名称
[3]version:当前模块的版本
3.4依赖管理
使用 dependency 标签指定被依赖 jar 包的坐标
<dependency>
<groupId>com.atguigu.maven</groupId>
<artifactId>Hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
3.5仓库管理
3.5.1分类
[1]本地仓库:为当前本机电脑上的所有 Maven 工程服务。
[2]远程仓库 :
(1)私服:架设在当前局域网环境下,为当前局域网范围内的所有 Maven 工程服务。
(2)中央仓库:架设在 Internet 上,为全世界所有 Maven 工程服务。
(3)中央仓库的镜像:架设在各个大洲,为中央仓库分担流量。减轻中央仓库的压力,同时更快的响应用户请求。
3.5.2 仓库中的内容
[1]Maven自身需要的插件
[2]我们自己开发的Maven工程
[3]第三方框架或工具的 jar 包
不管是什么样的 jar 包,在仓库中都是按照坐标生成目录结构,所以可以通过统一的方式查询或依赖
3.6生命周期
Maven 生命周期定义了各个构建环节的执行顺序,有了这个清单,Maven 就可以自动化的执行构建命令了。
运行任何一个阶段的时候,它前面的所有阶段都会被运行,例如我们运行 mvn install (安装)的时候,代码会被编译,测试,打包。这就是 Maven 为什么能够自动执行构建过程的各个环节的原因。此外,Maven 的插件机制是完全依赖 Maven 的生命周期的,因此理解生命周期至关重要。
一个典型的 Maven 构建(build)生命周期是由以下几个阶段的序列组成的:
Maven 有以下三个标准的生命周期
-
clean:项目清理的处理
-
default(或 build):项目部署的处理
-
site:项目站点文档创建的处理
对于生命周期的概述,可以参考菜鸟教程:
https://www.runoob.com/maven/maven-build-life-cycle.html
3.7插件和目标
●Maven 的核心仅仅定义了抽象的生命周期,具体的任务都是交由插件完成的。
●每个插件都能实现多个功能,每个功能就是一个插件目标。
●Maven 的生命周期与插件目标相互绑定,以完成某个具体的构建任务。
如:compile 就是插件maven-compiler-plugin的一个目标;pre-clean是插件maven-clean-plugin的一个目标。
3.8继承
假设现在有三个工程A,B, C
A的junit版本:4.0
B的junit版本:4.0
C的junit版本:4.9
此时如果项目需要将各个模块的junit版本统一为4.9,那么到各个工程中手动修改无疑是非常不可取的。 使用继承机制就可以将这样的依赖信息统一提取到父工程模块中进行统一管理
3.8.1创建父工程
创建父工程和创建一般的 Java 工程操作一致,唯一需要注意的是:打包方式处要设置为 pom
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<packaging>pom</packaging>
3.8.2在子工程中旅引入父工程
<parent>
<!-- 父工程坐标 -->
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<relativePath>从当前目录到父项目的 pom.xml 文件的相对路径</relativePath>
</parent>
3.8.3在父工程中管理依赖
将 Parent 项目中的 dependencies 标签,用 dependencyManagement 标签括起来
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
最后
给大家送一个小福利
附高清脑图,高清知识点讲解教程,以及一些面试真题及答案解析。送给需要的提升技术、准备面试跳槽、自身职业规划迷茫的朋友们。
dencies>`
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
最后
给大家送一个小福利
[外链图片转存中…(img-afQqg3X1-1721834794776)]
附高清脑图,高清知识点讲解教程,以及一些面试真题及答案解析。送给需要的提升技术、准备面试跳槽、自身职业规划迷茫的朋友们。
[外链图片转存中…(img-BsZvao2j-1721834794777)]