Maven学习笔记——核心概念

这篇博客主要总结了Maven中的核心概念,不包括具体的Maven操作。

一、Maven的目录结构

maven的目录结构是固定的,下面就是maven的目录结构图:
这里写图片描述

二、POM

Project Object Model:项目对象模型。将 Java 工程的相关信息封装为对象作为便于操作和管理的模型。
pom.xml文件是Maven工程的核心配置。可以说学习 Maven 就是学习 pom.xml 文件中的配置。

三、坐标

1、几何中的坐标

  • 在一个平面中使用 x、y 两个向量可以唯一的确定平面中的一个点。
  • 在空间中使用 x、y、z 三个向量可以唯一的确定空间中的一个点。

2、Maven的坐标
使用如下三个向量在 Maven 的仓库中唯一的确定一个 Maven 工程。

  • groupid:公司或组织的域名倒序+当前项目名称
  • artifactId:当前项目的模块名称
  • version:当前模块的版本

例如:

<groupId>com.jiayifan.maven</groupId>
<artifactId>Hello</artifactId>
<version>0.0.1-SNAPSHOT</version>

3、何通过坐标到仓库中查找jar

  • 将 gav 三个向量连起来
    com.jiayifan.maven+Hello+0.0.1-SNAPSHOT
  • 以连起来的字符串作为目录结构到仓库中查找
    com/jiayifan/maven/Hello/0.0.1-SNAPSHOT/Hello-0.0.1-SNAPSHOT.jar

注意:我们自己的Maven工程必须执行安装操作才会进入仓库。安装的命令是:mvn install

四、仓库

1、本地仓库:为当前本机电脑上的所有 Maven 工程服务。
2、远程仓库

  • 私服:架设在当前局域网环境下,为当前局域网范围内的所有 Maven 工程服务。
  • 中央仓库:架设在 Internet 上,为全世界所有Maven工程服务。
  • 中央仓库的镜像:架设在各个大洲,为中央仓库分担流量。减轻中央仓库的压力,同时更快的响应用户请求。

3、 仓库中的文件

  • Maven 的插件
  • 我们自己开发的项目的模块
  • 第三方框架或工具的 jar

不管是什么样的 jar 包,在仓库中都是按照坐标生成目录结构,所以可以通过统一的方式查询或依赖。

扫描二维码关注公众号,回复: 1353070 查看本文章

五、依赖管理(重点)

1、依赖
A jar 包用到了B jar 包中的某些类时,A就对 B产生了依赖,这就是依赖。

2、依赖范围
依赖的范围有几个可选值,我们用得到的是:compile、test、provided 三个。下面这张表解释了这三种范围:

~ compile test provided
主程序 参与 不参与 参与
测试程序 参与 参与 参与
参与打包 参与 不参与 不参与
参与部署 参与 不参与 不参与

例如下面图片中Tomcat运行环境,就是provided依赖范围:
这里写图片描述
3、依赖的传递性
依赖的传递性就是如果A模块依赖B模块,而B模块又依赖C模块,那么AB中就自动包含了C模块依赖的jar包。但是依赖的传递性是有条件的,那要看C模块的依赖范围是不是compile,如果是就具有依赖传递性,如果不是就不具有依赖传递性。
这里写图片描述
4、依赖的排除
如果我们在当前工程中引入了一个依赖是 A模块,而 A模块又依赖了 B模块,那么Maven会自动将 A模块依赖的 B模块引入当前工程,但是个别情况下 B模块有可能是一个不稳定版,或对当前工程有不良影响。这时我们可以在引入 A模块的时候将 B模块排除。

六、生命周期

1、什么是 Maven 的生命周期?
Maven生命周期定义了各个构建环节的执行顺序,有了这个清单,Maven就可以自动化的执行构建命令。
2、Maven有三套相互独立的生命周期,分别是:

  • Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
  • Default Lifecycle 构建的核心部分,编译,测试,打包,安装,部署等等。
  • Site Lifecycle 生成项目报告,站点,发布站点。

它们是相互独立的,你可以仅仅调用 clean 来清理工作目录,仅仅调用 site来生成站点。当然你也可以直接运行 mvn clean install site运行所有这三套生命周期。

每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。比如,运行 mvn clean,这个cleanClean生命周期的一个阶段。有 Clean生命周期,也有 clean阶段。

3、Clean 生命周期:
Clean 生命周期一共包含了三个阶段:

  • pre-clean 执行一些需要在 clean 之前完成的工作
  • clean 移除所有上一次构建生成的文件
  • post-clean 执行一些需要在 clean之后立刻完成的工作

4、Site生命周期

  • pre-site 执行一些需要在生成站点文档之前完成的工作
  • site生成项目的站点文档
  • post-site执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
  • site-deploy将生成的站点文档部署到特定的服务器上

5、Default 生命周期
Default生命周期是 Maven 生命周期中最重要的一个,绝大部分工作都发生在这个生命周期中。这里只解释一些比较重要和常用的阶段:

validate
generate-sources
process-sources
generate-resources
process-resources 复制并处理资源文件,至目标目录,准备打包。
compile 编译项目的源代码。
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources 复制并处理资源文件,至目标测试目录。
test-compile 编译测试源代码。
process-test-classes
test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
prepare-package
package 接受编译好的代码,打包成可发布的格式,如 JAR。
pre-integration-test
integration-test
post-integration-test
verify
install 将包安装至本地仓库,以让其它项目依赖。
deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享或部署到服务器上运行。

七、插件和目标

Maven 的核心仅仅定义了抽象的生命周期,具体的任务都是交由插件完成的。
每个插件都能实现多个功能,每个功能就是一个插件目标。
Maven的生命周期与插件目标相互绑定,以完成某个具体的构建任务。
例如:compile就是插件maven-compiler-plugin 的一个目标;pre-clean 是插件 maven-clean-plugin 的一个目标。

八、继承

A模块继承了B模块A模块就可以继承B模块的依赖,一个模块可以有多个子模块,主要用于于非compile范围的依赖信息的传递。

九、聚合

将多个工程拆分为模块后,需要手动逐个安装到仓库后依赖才能够生效。修改源码后也需要逐个手动进行clean操作。而使用了聚合之后就可以批量进行 Maven工程的安装、清理工作。

猜你喜欢

转载自blog.csdn.net/q982151756/article/details/79914888