Maven

作者: 机智的老刘明同志 | 来源:发表于2019-11-21 00:52 被阅读0次

    1.简介与安装 
        1.1 发展历程 
        1.2 构建过程中的各个环节
        1.3 安装Maven核心程序
        1.4 成功安装的标志:mvn -v
        1.5 联网问题
    2.Maven的核心概念
        2.1 约定的目录结构
        2.2 为什么要遵守约定的目录结构?
        2.3 常用的maven命令:(需在pom所在目录下运行)
        2.4 pom.xml
        2.5 坐标
        2.6 仓库
    3.依赖
        3.1 概念
        3.2 作用域
        3.3 依赖的传递性
        3.4 依赖的排除
        3.5 依赖调解(就近原则)
        3.6 统一声明版本号
        3.7 继承
        3.8 聚合
        3.9 自动部署(步骤很多,这里只列出配置)
    4.生命周期
        4.1 概念
        4.2 default(常用)
        4.3 插件和目标:


    1.简介与安装:

            Maven是服务于java平台的自动化构建工具

        1.1 发展历程:

            发展历程:Make->Ant->Maven->Gradle

        1.2 构建过程中的各个环节:

            1 清理:将以前编译得到的旧的class字节码文件删除,为下一次编译做准备
            2 编译:将java源程序编程成class字节码文件
            3测试:自动测试,自动调用junit程序
            4报告:测试程序执行的结果
            5打包:动态web工程打war包,java工程打jar包
            6安装:Maven特定的概念------将打包得到的文件复制到”仓库“中的指定位置
            7部署:将动态web工程生成的war包复制到servlet容器的指定目录下,使其可以运行

        1.3 安装Maven核心程序:

            1 配置JAVA_HOME环境变量 (maven就是用java写的,因此JAVA_HOME必须要配置)
            2 配置MAVEN_HOME环境变量    D:\apache-maven-3.6.1
            3 配置Path    %MAVEN_HOME%\bin\

        1.4 成功安装的标志:mvn -v

        1.5 联网问题:

            Maven的核心程序仅仅定义了抽象的生命周期,但是具体的工作必须要有特定的插件去完成。而插件本身并不在Maven的核心程序范围内。我们执行的maven命令如果用到某些插件,则先会在本地仓库查找,如果本地仓库查找失败,则会联网下载。如果下载失败则构建失败(ps:类似npm,maven也有阿里云镜像)

    2.Maven的核心概念:

        2.1 约定的目录结构:

        2.2 为什么要遵守约定的目录结构?

            Maven负责我们项目的自动化构建,以编译为例,Maven要自动进行编译,那么它必须知道java源文件保存在哪里。如果我们自己自定义的东西想要让框架或者工具知道,有两种方法:

            (1) 以配置的方式明确告诉框架
            (2) 遵守框架内部已经存在的约定

            所以:约定 > 配置 > 编码

        2.3 常用的maven命令:(需在pom所在目录下运行)

            mvn clean:清理
            mvn compile:编译主程序
            mvn test-compile:编译测试程序
            mvn test:执行测试
            mvn package:打包
            mvn install:安装
            mvn site:生成站点

        2.4 pom.xml:

            Project  Object  Model:项目对象模型,maven的核心配置文件

            POM 中可以指定以下配置:
                项目依赖,插件,执行目标,项目构建 profile,项目版本,项目开发者列表,相关邮件列表信息

        2.5 坐标:

            1.使用pom.xml下面三个向量在仓库中唯一定位一个Maven工程

                [1] groupid:公司或组织域名倒序+项目名
                <groupid>com.xxx.maveName</groupid>
                [2] artifactid:模块名
                <artifactid>hello</artifactid>
                [3] version:版本
                <version>1.0.0</version>

            2.Maven工程的坐标与仓库中路径的对应关系:

        2.6 仓库:

            1.仓库的位置:
                打开 config/settings.xml 寻找 localRepository,默认值:用户名/.m2/repository
            2.仓库的分类:
                本地仓库:当前电脑上部署的仓库目录,为当前电脑上所有的Maven工程服务
                远程仓库:
                (1)局域网:搭建在局域网中,为局域网内所有的Maven工程服务
                (2)中央仓库:架设在Internet上
                (3)中央仓库镜像:分担中央仓库的流量
            3.仓库中保存的内容:
                Maven自身所需要的插件
                第三方框架或工具的jar包
                我们自己开发的Maven工程

    3.依赖:

        3.1 概念:

            Maven解析依赖信息时会用到本地仓库中查找被依赖的jar包。

            如下图所示:Maven会到目录 C:\Users\用户名\.m2\repository\com\liuming\maven\hello\1.0  去寻找hello-1.0.jar 这个jar包

            因此对于我们自己开发的Maven工程,也需要使用mvn install命令安装(安装后才会在仓库生成对应jar包)

        3.2 作用域:

            <scope>compile</scope>

            compile:默认值。参与当前项目的编译,测试,运行周期。打包的时候通常也会包含进去
            test:仅参与测试相关的工作
            provided:打包的时候可以不用包进去,别的设施会提供。该依赖理论上可以参与编译,测试,运行等周期。相当于compile

        3.3 依赖的传递性:

            在项目往往需要引入多个依赖, 而引入的依赖又会引入其他的依赖。
            举个例子:项目中引入了A依赖,而A又依赖于B。所以A是项目的第一直接依赖,B是项目的一个传递性依赖有了Maven的传递性依赖机制,就不用担心引入多余的依赖。 Maven会解析各个直接依赖的POM, 将那些必要的间接依赖以传递性依赖的形式引入到当前的项目中。但是在这里注意:非compile范围的依赖不能传递

        3.4 依赖的排除:

            举个例子:项目中引入了A依赖,而A又依赖于B,B又依赖于C,但是我们的项目不需要C,那么我们可以使用exclusion排除依赖

        3.5 依赖调解(就近原则):         

            项目分别引入了A,C两个依赖,依赖关系如下。哪个版本的X会被maven解析使用呢?

                1.项目->A->B->X(1.0)
                2.项目->C->X(2.0),
                3.项目->D->X(3.0)

            这里有个两个原则:1.路径最近者优先2.路径长度一致,使用在POM中最先声明的依赖

        3.6 统一声明版本号:

        3.7 继承:

            一个 maven 项目可以继承另一个 maven 的依赖, 这就是继承

            举个例子:这里我们创建一个父项目和一个子项目,在父项目中对junit依赖进行统一管理
                1. 打包方式(packaging):所有的父级项目的packaging都为pom
                2.注意dependencyManagement (dependencyManagement 只是声明依赖,并不实现引入)

    父项目 子项目

        3.8 聚合:

            一键安装各个模块工程(省去了切到每个项目执行mvn install)

        3.9 自动部署: (步骤很多,这里只列出配置)

    4.生命周期:

        4.1 概念:

            Maven的生命周期有3套:clean(清理项目),default(构建时的所有步骤),site(建立和发布项目站点)

        4.2 default(常用):

            default:clean -> resources -> compile -> testResources -> testCompile -> test -> jar -> install

            Maven核心程序为了更好的实现自动化构建,不管要执行生命周期中的哪一阶段,都会从生命周期的最初位置开始(从头重新来一遍)

        4.3 插件和目标:

            1.生命周期的各个阶段仅仅定义了要执行的任务是什么
            2.各个阶段和插件的目标是对应的
            3.相似的目标由特定的插件来完成

    相关文章

      网友评论

          本文标题:Maven

          本文链接:https://www.haomeiwen.com/subject/gjaabctx.html