阿里 P8 大牛的 Maven 学习笔记,在 GitHub 上仅一天就获赞 上万
1.Maven 概念
Maven 是目前最流行的自动化构建工具,Maven 是一款在大型项目开发过程中不可或缺的重要工具。
maven 可以管理 jar 文件
自动下载 jar 和他的文档,源代码
管理 jar 直接的依赖, a.jar 需要 b.jar , maven 会自动下载 b.jar
管理你需要的 jar 版本
帮你编译程序,把 java 编译为 class
帮你测试你的代码是否正确。
帮你打包文件,形成 jar 文件,或者 war 文件
帮你部署项目
其中 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 实战书,需要的朋友们 戳戳我 即可获取啦~~
评论