一、简要认识Maven
简介:Maven是一个java的项目管理工具,可以对java项目进行构建、依管理。
使用目的:方便添加和更新jar包、解决jar包之间的依赖关系,以及将项目拆分成多个模块。
二、Maven下载及配置(Windows)
- 官网下载压缩包
- 解压压缩包,自定义解压位置,路径尽可能无中文;
- 配置环境变量
a. 新建系统变量命名为MAVEN_HOME;变量值为解压包的路径。eg:F:\Java\Maven\apache-maven-3.6.3
b. 编辑系统变量Path,添加变量值:;%MAVEN_HOME%\bin
- 保存退出后到终端运行:
mvn -v
命令,显示版本信息则配置成功。
三、了解九个核心概念
- POM
- 坐标
- 仓库管理
- 目录结构
- 生命周期
- 依赖管理
- 插件和目标
- 继承
- 聚合
tips:maven的各个操作都由各个插件来完成
1.POM
Project Object Model:项目对象模型。将 Java 工程的相关 信息* 封装为对象作为便于操作和管理的模型,即包含jar包或jar包的依赖关系的信息。 Maven 工程的核心配置,即在构建过程中所有的相关设置都在这里设置。可以说学习 Maven 就是学习 pom.xml 文件中的配置。
信息是指:jar包等的名称、版本等,即上述概念中的坐标等信息,用于Maven的自动获取并使其参与项目的构建。
2.坐标
Maven中的坐标用于确定jar包或jar包的依赖关系的身份(或位置),(如同数学几何中的坐标确定点或物)
使用如下三个向量在 Maven 的仓库中唯一的确定一个jar包。
[1]groupid:公司或组织的域名倒序+当前项目名称 //即项目的位置
[2]artifactId:当前项目的某一个模块的名称
[3]version:当前模块的版本
tips:三坐标简称 “gav”
利用坐标定位jar包位置
例如,我的repository仓库下的一个插件:compile编译插件
1 | <groupId>org.apache.maven.plugins</groupId> |
组合起来是:"org.apache.maven.plugins" + "maven-compiler-plugin" + "3.8.1"
转换为文件路径:org\apache\maven\plugins\maven-compiler-plugin\3.8.1
为什么我要用编译插件,因为它花了我一个下午时间,就是编译插件版本太低导致编译出错,关键下了最新版之后还是改不动它,它依旧用的是原版本,先记个仇,后面再解决。
tips:如果是我们自己的Maven工程,则需要执行安装操作才会进入本地仓库:mvn install.??????????
3.Maven资源(仓)库
Maven有三个资源库(或两个:本地和远程)
Maven本地资源库:本地存储中项目的依赖库(下载下来的jar包和其他文件)的repository文件夹。默认为C盘用户文件夹下的.m2目录文件里,可自定义保存位置。文件内部如上述定位的例子。
Maven中央存储库:依赖库的来源,即没有的依赖库可到中央存储库下载到本地资源库。默认的仓库是位于国外的Maven仓库,可更换为阿里云的镜像仓库,提高下载速度。中央仓库是远程仓库的特例,或者说常用、资源较多的远程仓库。
镜像仓库用于分担中央仓库的流量,提高用户访问和下载速度。
- Maven远程存储库:依赖库的来源,只要能提供所需框架或jar包,都称为远程仓库。在POM.xml文件内自定义中央仓库没有的依赖库的获取路径。
仓库中的文件:
- Maven的插件
- 自己开发的项目模块
- 第三方框架或jar包。
所有的文件按坐标生成的目录结构,以此统一查询或依赖
三者关系:当建立一个Maven项目,Maven会检查pom.xml文件,确定需要哪些依赖库。1. Maven首先从本地资源库寻找,如果本地没有,2. Maven自动到Maven中央存储库去下载,如果中央存储库没有所需依赖,进入第三步。3. 如果pom.xml没有指定依赖库及其获取路径,Maven报错;如果在pom.xml指定了路径,Maven按照路径去到所在的远程仓库下载。
4.目录结构
严格的说应该是约定的目录结构,Maven工程的源文件目录,都应该按照Maven的标准设定。
1 | 项目名 |
tips:上述的产生不同的文件将在介绍执行命令时解释。
5.Maven的生命周期
- 1》生命周期之前,先了解一个maven工程构建的几个主要环节:
①清理:删除以前的编译结果,为重新编译做好准备。
②编译:将 Java 源程序编译为字节码文件。
③测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。
④报告:在每一次测试后以标准的格式记录和展示测试结果。
⑤打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java 工程对应 jar 包,Web 工程对应 war 包。
⑥安装:在 Maven 环境下特指将打包的结果——jar 包或 war 包安装到本地仓库中。
⑦部署:将打包的结果部署到远程仓库或将 war 包部署到服务器上运行。
tips:环节步步相扣,执行完前一环节才能执行下一环节。 - 2》再了解自动化构建:即Maven能够自动化执行构建环节从开始到终点。否则是需要人为手动通过命令逐个实现。
- 3》接下来是生命周期
Maven生命周期:就是定义了各个构建环节的执行顺序,有了这个顺序,Maven才可以自动化执行构建命令。
Maven有三套相互独立的生命周期,分别是:
①Clean Lifecycle :在进行真正的构建之前进行一些清理工作。
②Default Lifecycle :构建的核心部分,编译,测试,打包,安装,部署等等。
③Site Lifecycle :生成项目报告,站点,发布站点。
它们是相互独立的,可以仅仅调用 clean 来清理工作目录,或者仅仅调用 site 来生成站点。当然也可以直接运行 mvn clean install site
, 运行所有这三套生命周期。
生命周期是由一组阶段(phase)组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。比 如,运行 mvn clean,这个 clean 是 Clean 生命周期的一个阶段。有 Clean 生命周期,也有 clean 阶段。
- Clean 生命周期
Clean 生命周期一共包含了三个阶段:
①pre-clean 执行一些需要在 clean 之前完成的工作
②clean 移除所有上一次构建生成的文件
③post-clean 执行一些需要在 clean 之后立刻完成的工作 - Site 生命周期
①pre-site 执行一些需要在生成站点文档之前完成的工作
②site 生成项目的站点文档
③post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
④site-deploy 将生成的站点文档部署到特定的服务器上 这里经常用到的是 site 阶段和 site-deploy 阶段,用以生成和发布 Maven 站点,这可是 Maven 相当强大 的功能,Manager 比较喜欢,文档及统计数据自动生成,很好看。 - 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 将最终的包复制到远程的仓库,以让其它开发人员与项目共享或部署到服务器上运行。
tips:学习了解即可,有maven自动化操作
几个基本的Maven命令
mvn install 安装
mvn clean 清理
mvn compile 编译
mvn test 测试
mvn package 打包
6.依赖
未……………………
7.插件和目标
- Maven的核心仅仅定义了抽象的生命周期,具体的任务都是交由插件完成的
- 每个插件都能实现多个功能,每个功能就是一个插件目标
- Maven的生命周期与插件目标相互绑定,以完成某个具体的构建任务。
eg:compile是插件maven-compiler-plugin的一个目标。
未……………………
8.继承
未……………………
9..聚合
将多个工程拆分为模块后,需要手动逐个安装到仓库后依赖才能够生效。修改源码后也需要逐个手动进 行 clean 操作。而使用了聚合之后就可以批量进行 Maven 工程的安装、清理工作。
如何配置聚合? 在总的聚合工程中使用 modules/module 标签组合,指定模块工程的相对路径即可
1 | <modules> |
未……………………
待补:基于IDEA的Maven构建。
参考文档、教程
-
视频也就看文档看懵的时候来找找相关的视频,本文档主要根据其讲义总结,侵删!!
-
应该是来源于官方文档,但是翻译有点菜。能看,相对好。