抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

一、简要认识Maven

简介:Maven是一个java的项目管理工具,可以对java项目进行构建、依管理。

使用目的:方便添加和更新jar包、解决jar包之间的依赖关系,以及将项目拆分成多个模块。

二、Maven下载及配置(Windows)

  1. 官网下载压缩包
    1kzqLn.png
  2. 解压压缩包,自定义解压位置,路径尽可能无中文;
  3. 配置环境变量
    a. 新建系统变量命名为MAVEN_HOME;变量值为解压包的路径。eg: F:\Java\Maven\apache-maven-3.6.3
    b. 编辑系统变量Path,添加变量值: ;%MAVEN_HOME%\bin
  4. 保存退出后到终端运行:mvn -v 命令,显示版本信息则配置成功。

1kxbE6.png

三、了解九个核心概念

  1. POM
  2. 坐标
  3. 仓库管理
  4. 目录结构
  5. 生命周期
  6. 依赖管理
  7. 插件和目标
  8. 继承
  9. 聚合

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
2
3
<groupId>org.apache.maven.plugins</groupId> 
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>

组合起来是:"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有三个资源库(或两个:本地和远程)

  1. Maven本地资源库:本地存储中项目的依赖库(下载下来的jar包和其他文件)的repository文件夹。默认为C盘用户文件夹下的.m2目录文件里,可自定义保存位置。文件内部如上述定位的例子。

  2. Maven中央存储库:依赖库的来源,即没有的依赖库可到中央存储库下载到本地资源库。默认的仓库是位于国外的Maven仓库,可更换为阿里云的镜像仓库,提高下载速度。中央仓库是远程仓库的特例,或者说常用、资源较多的远程仓库。

镜像仓库用于分担中央仓库的流量,提高用户访问和下载速度。

  1. Maven远程存储库:依赖库的来源,只要能提供所需框架或jar包,都称为远程仓库。在POM.xml文件内自定义中央仓库没有的依赖库的获取路径。

仓库中的文件:

  1. Maven的插件
  2. 自己开发的项目模块
  3. 第三方框架或jar包。

所有的文件按坐标生成的目录结构,以此统一查询或依赖

三者关系:当建立一个Maven项目,Maven会检查pom.xml文件,确定需要哪些依赖库。1. Maven首先从本地资源库寻找,如果本地没有,2. Maven自动到Maven中央存储库去下载,如果中央存储库没有所需依赖,进入第三步。3. 如果pom.xml没有指定依赖库及其获取路径,Maven报错;如果在pom.xml指定了路径,Maven按照路径去到所在的远程仓库下载。

4.目录结构

严格的说应该是约定的目录结构,Maven工程的源文件目录,都应该按照Maven的标准设定。

1
2
3
4
5
6
7
8
9
10
11
项目名
|
|---src //源码目录
|---|---main //主程序目录
|---|---|---java //主程序下的java源文件目录
|---|---|---resources //主程序下的资源文件目录
|---|---test //测试程序目录
|---|---|---java //测试程序下的java源文件目录
|---|---|---resources //测试程序下的资源文件目录
| //执行命令后之后会产生不同的文件*
|---pom.xml文件 //pom.xml项目配置目录文件

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 阶段。

  1. Clean 生命周期
    Clean 生命周期一共包含了三个阶段:
    ①pre-clean 执行一些需要在 clean 之前完成的工作
    ②clean 移除所有上一次构建生成的文件
    ③post-clean 执行一些需要在 clean 之后立刻完成的工作
  2. Site 生命周期
    ①pre-site 执行一些需要在生成站点文档之前完成的工作
    ②site 生成项目的站点文档
    ③post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
    ④site-deploy 将生成的站点文档部署到特定的服务器上 这里经常用到的是 site 阶段和 site-deploy 阶段,用以生成和发布 Maven 站点,这可是 Maven 相当强大 的功能,Manager 比较喜欢,文档及统计数据自动生成,很好看。
  3. 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
2
3
4
5
<modules>
<module>../Hello</module>
<module>../HelloFriend</module>
<module>../MakeFriends</module>
</modules>

未……………………

待补:基于IDEA的Maven构建。

参考文档、教程

  1. 尚硅谷–Maven教程

    视频也就看文档看懵的时候来找找相关的视频,本文档主要根据其讲义总结,侵删!!

  2. 易百教程

    应该是来源于官方文档,但是翻译有点菜。能看,相对好。

  3. Maven官方

评论

Gitalk评论系统对接至Github Issue,随心评论🐾🐾.....