写点什么

阿里 P8 大牛的 Maven 学习笔记,在 GitHub 上仅一天就获赞 上万

作者:马小乎
  • 2021 年 11 月 11 日
  • 本文字数:3164 字

    阅读完需:约 10 分钟

1.Maven 概念

Maven 是目前最流行的自动化构建工具,Maven 是一款在大型项目开发过程中不可或缺的重要工具。

  1. maven 可以管理 jar 文件

  2. 自动下载 jar 和他的文档,源代码

  3. 管理 jar 直接的依赖, a.jar 需要 b.jar , maven 会自动下载 b.jar

  4. 管理你需要的 jar 版本

  5. 帮你编译程序,把 java 编译为 class

  6. 帮你测试你的代码是否正确。

  7. 帮你打包文件,形成 jar 文件,或者 war 文件

  8. 帮你部署项目

其中 5.6.7.8 属于 Maven 项目构建的过程,所以 Maven 不仅可以完成 jar 包的管理,还能完成项目的构建。

2.Maven 项目构建

项目构建是面向过程的,就是一些步骤,完成项目代码的编译,测试,运行,打包,部署等等。maven 支持的构建包括有:

  • 清理:把之前项目编译的东西删除,为新的编译代码做准备。

  • 编译: 把 java 文件编译为 class 文件,Maven 的编译功能是批量的,可以同时把成千上万的文件编译为 class。与命令 javac 不同,javac 一次编译一个文件。

  • 测试:maven 可以执行测试程序代码,验证你的功能是否正确。同时也是批量操作,即 maven 可以同时执行多个测试代码,同时测试很多功能。

  • 报告:生成测试结果的文件, 通过报告查看测试是否通过。

  • 打包:如果测试通过,就可以对项目进行打包。打包的含义就是 把你的项目中所有的 class 文件,配置文件等所有资源放到一个压缩文件中。通常 java 程序,压缩文件是 jar 扩展名的。对于 web 应用,压缩文件扩展名是.war。

  • 安装:在 Maven 环境下把“打包”生成的 jar、war 文件安装到本地仓库。

  • 部署:将打包的结果部署到远程仓库或将 war 包部署到服务器上运行

部署一般采用手动完成,前 6 个步骤都是通过 Maven 进行实现。

3.Maven 的核心概念

  • POM:Maven 的核心,它是一个文件,名称通常为 pom.xml,开发人员通过管理 pom.xml 可以完成控制 maven 构建项目的过程以及 jar 包依赖的管理。

  • 约定的目录结构 : maven 项目的目录和文件的位置都是规定的。

  • 坐标 : 是一个唯一的字符串,用来表示资源的。

  • 依赖管理 : 管理项目中可以使用的 jar 文件。

  • 仓库管理(了解) :资源存放的具体位置。

  • 生命周期 (了解) : maven 工具构建项目的过程,就是生命周期。即 Maven 项目构建的 7 个步骤就代表 Maven 的生命周期。

  • 插件和目标(了解):执行 maven 构建的时候用的工具是插件

  • 继承(后期讲解)

  • 聚合(后期讲解)

可以使用 maven 的命令完成相关操作,同时也可以在 idea 中直接使用 maven,代替命令。

Maven 的构建直接看视频即可。

4.Maven 的核心概念详述

4.1 Maven 工程约定的目录结构



4.2 pom 文件

pom 在 maven 中是一个 pom.xml 文件,该文件是 maven 的灵魂,maven 的项目构建以及管理依赖的功能都是通过编写该文件实现的。

4.2.1 pom.xml 文件的组成

(1) 坐标

唯一值, 在互联网中唯一标识一个项目的。坐标由三部分构成


(2) packaging

打包后压缩文件的扩展名,默认是 jar ,web 应用是 war

(3) 依赖

dependencies 和 dependency ,相当于是 java 代码中 import

你的项目中要使用的各种资源说明, 比我的项目要使用 mysql 驱动 <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.9</version> </dependency> </dependencies> 先在本地仓库中找 mysql 文件夹(groupId 对应的文件夹),找到后在 mysql 文件夹中找 mysql-connector-java 文件夹(artifactId 对应的文件夹),最后在 mysql-connector-java 文件夹中找 5.1.9 版本对应的文件夹(version 对应的文件夹),然后把对应的 jar 包引入我们的项目中,如果有任意一步没找到对应文件夹,则从中央仓库拉取。 Maven 的一个重要作用就是管理 jar 包,为了一个项目可以构建或运行,项目中不可避免的,会依赖很多其他的 jar 包,在 Maven 中,这些 jar 就被称为依赖,使用标签 dependency 来配置。而这种依赖的配置正是通过坐标来定位的,由此我们也不难看出,maven 把所有的 jar 包也都视为项目存在了。

(4) properties

properties 是用来定义一些配置属性的 , 例 如 project.build.sourceEncoding(项目构建源码编码方式),可以设置为 UTF-8,防止中文乱码。同时也可以设置项目的运行的 Java 版本。


(5) build

build 表示与构建相关的配置,例如设置编译插件的 jdk 版本


(6) parent

在 Maven 中,如果多个模块都需要声明相同的配置,例如:groupId、 version、有相同的依赖、或者相同的组件配置等,也有类似 Java 的继承机 制,用 parent 声明要继承的父工程的 pom 配置。

(7) modules

在 Maven 的多模块开发中,为了统一构建整个项目的所有模块,可以提供一 个额外的模块,该模块打包方式为 pom,并且在其中使用 modules 聚合的 其它模块,这样通过本模块就可以一键自动识别模块间的依赖关系来构建所有 模块,叫 Maven 的聚合。

4.3 Maven 的生命周期和插件

  • Maven 的生命周期指的就是 maven 构建项目的过程,包括清理、编译、测试、报告、打包、安装、部署这几个阶段。这几个阶段都可以通过 Maven 相对应的命令进行完成。

  • Maven 的插件:在 Maven 执行命令的过程中,真正完成命令对应功能的就是这些插件。这些插件就是一些 jar 文件。


4.4 Maven 单元测试

(1)加入依赖,在 pom.xml 加入单元测试依赖


(2)在 maven 项目中的 src/test/java 目录下,创建测试程序。


4.5 Maven 常用命令

Maven 可以独立使用,通过以下的命令就可以单独完成 maven 的生命周期的执行

  • mvn clean:清理(会删除原来编译和测试的目录,即 target 目录,但是已经 install 到仓库里的包不会删除) ,该命令由 maven-clean-plugin 插件实现。

  • mvn compile:编译主程序(会在当前目录下生成一个 target,里边存放编译主程序之后生成的字节码文件) ,该命令由 maven-compiler-plugin 插件实现。

  • mvn test-compile:编译测试程序(会在当前目录下生成一个 target,里边存放编译测试程序之后生成的字节码文件)

  • mvn test:测试(会生成一个目录 surefire-reports,保存测试结果)

  • mvn package:打包主程序(会编译、编译测试、测试、并且按照 pom.xml 配置把主程序打包生成 jar 包或者 war 包) (该命令生成的 jar 包只包含 src/main 目录下的所有文件,test 不包含。)

  • mvn install:安装主程序(会把本工程打包,并且按照本工程的坐标保存到本地仓库中)

  • mvn deploy:部署主程序(会把本工程打包,按照本工程的坐标保存到本地库中,并且还会保存到私服仓库中。 还会自动把项目部署到 web 容器中)。

注意:执行以上命令必须在命令行进入 pom.xml 所在目录,同时比如你执行 mvn test,Maven 会自动从上往下帮你执行,因此你不必再执行 mvn test-compile 等命令。

5.Maven 在 IDEA 中的使用

5.1 Maven 在 IDEA 中的配置

idea 中内置了 maven ,一般不使用内置的, 因为用内置修改 maven 的设置不方便。使用自己安装的 maven, 需要覆盖 idea 中的默认的设置。让 idea 指定 maven 安装位置等信息 (1)配置当前工程的设置, file--settings ---Build, Excution,Deployment--Build Tools--Maven Maven Home directory: maven 的安装目录 User Settings File : 就是 maven 安装目录 conf/setting.xml 配置文件 Local Repository : 本机仓库的目录位置 --Build Tools--Maven--Runner VM Option: -DarchetypeCatalog=internal JRE: 你项目的 jdk maven 项目创建时,会联网下载模版文件,模版文件比较大, 使用-DarchetypeCatalog=internal,不用下载, 创建 maven 项目速度快。 (2)配置以后新建工程的设置, file--other settings--Settings for New Project

5.2 使用 Maven 模板创建项目

  • maven-archetype-quickstart : 普通的 java 项目

  • maven-archetype-webapp : web 工程

6.Maven 依赖的范围

Maven 中的依赖范围利用<scope></scope>标签表示。scope 的值有 compile, test, provided ,默认是 compile

scope:表示依赖使用的范围,也就是在 maven 构建项目的相应阶段中起作用。maven 构建项目的过程即生命周期,包括编译,测试,打包,安装,部署过程(阶段)。


结尾

好啦本篇就讲到这里,另外小编为了答谢各位粉丝朋友的支持还给大家准备了一本 Maven 实战书,需要的朋友们 戳戳我 即可获取啦~~


用户头像

马小乎

关注

程序不是年轻的专利,但是,它属于年轻! 2021.06.04 加入

java知识分享,更多免费资料,大厂面试,数据架构,分布式,spring,JVM,加:maxiao-112

评论

发布
暂无评论
阿里 P8大牛的 Maven学习笔记,在 GitHub上仅一天就获赞 上万