Maven

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.相似的目标由特定的插件来完成

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351