Maven 学习笔记

2021-01-17   186 次阅读


Maven 学习笔记

Maven是什么

  1. Maven是一款服务于java平台的自动化构建工具。

    • 构建

      1. 概念:以“java源文件”、“框架配置文件”、“JSP”、“HTML”、“图片”等资源为原材料,去“生产”一个可以运行的项目的过程。(构建就是以我们编写的Java代码、框架的配置文件、国际化等其他资源文件、JSP页面和图片等静态资源文件作为“原材料”去“生产”出一个可以运行的项目的过程。)
        • 编译
        • 部署
        • 搭建
      2. 编译:java源文件 — 编译 —> Class字节码文件,交给JVM去执行
      3. 部署:一个BS项目最终运行的并不是动态Web工程本身,而是这个动态Web工程编译的结果。(当我们需要通过浏览器访问Java程序时,就必须将包含Java程序的Web工程编译的结果拿到服务器上的指定目录下,并启动服务器,这个“拿”的过程我们就叫部署。)
  2. 构建过程中的各个环节

    1. 清理
      将以前编译得到的旧的class字节码文件删除,为下一次编译做准备

    2. 编译
      将java源程序编译为class字节码文件

    3. 测试
      自动测试,自动调用junit程序

    4. 报告
      测试程序执行的结果

    5. 打包
      动态web工程大的是war包,java工程打jar包

    6. 安装
      Maven特定的概念:将打包得到的文件复制到仓库中的指定位置

    7. 部署

      将动态web工程生成的war包复制到Servlet容器的指定目录下,使其可以运行

Maven的核心概念

  1. 约定的目录结构

  2. POM

    1. Project Object Model项目对象模型
    2. pom.xml对于Maven工程是核心配置文件,与构建过程相关的一切设置都在这个文件中进行设置。他的重要程度相当于web.xml对于动态Web工程的重要性。
  3. 坐标

    1. 数学中的坐标:
      • 在平面上使用X和Y两个向量可以唯一的定位平面中的任何一个点,
      • 在空间中使用X、Y、Z三个向量可以唯一的定位空间中任何一个点
    2. Maven的坐标
      使用下面三个向量在仓库中定位一个唯一Maven工程
      1. groupId
        公司或组织域名倒叙加项目名
      2. artifactId
        模块名称
      3. version
        版本
    3. Maven工程的坐标跟仓库中路径对应关系
  4. 依赖

    1. Maven解析依赖信息时,会到本地仓库中查找被依赖的jar包。对于我们自己开发的Maven工程,使用install命令安装后就可以进入仓库。

    2. 依赖的范围
      image.png

      • compile

        1. 对主程序是否有效:有效
        2. 对测试程序是否有效:有效
        3. 是否参与打包:参与
      • test

        1. 对主程序是否有效:无效
        2. 对测试程序是否有效:有效
        3. 是否参与打包:不参与
      • provided

        1. 对主程序是否有效:有效
        2. 对测试程序是否有效:有效
        3. 是否参与打包:不参与
        4. 是否参与部署:不参与

        典型的例子就是servlet-api.jar因为Web容器(例如Tomcat)已经提供了,如果你部署时也有这个包可能会有问题,测试、开发的时候是没有Web容器的,所以需要依赖这个包运行。

        image.png

  5. 仓库

    1. Maven仓库分有两种

      1. 本前地仓库,当电脑上部署的仓库目录,为当前电脑上所有Maven工程服务

      2. 远程仓库,远程仓库又称为这么几类

        • 私服
          搭建在局域网环境中,为局域网范围内的所有Maven工程服务

        • 中央仓库

          架设在Internet上,为全世界所有Maven工程服务

        • 中央仓库的镜像
          为了分担中央仓库的流量,提升用户访问速度

    2. 仓库中保存的内容

      仓库中保存的都是Maven工程

      1. Maven自身所需要的插件
      2. 第三方框架或工具的jar包
      3. 我们自己开发的Maven工程
  6. 生命周期/插件/目标

    1. 各个构建环节执行的顺序。不能打乱顺序,必须按照既定的正确的顺序来执行。

    2. Maven的核心程序中定义了生命周期,生命周期中各个阶段的具体任务是由插件来完成的

    3. Maven有三套互相独立的生命周期:

      1. Clean Lifecycle 正在进行真正的构建之前进行一些清理工作。
        Clean生命周期一共包含了三个阶段:

        • pre-clean 执行一些需要在clean之前完成的工作。
        • clean 移除所有上次构建生成的文件
        • post-clean 执行一些需要在clean之后立刻完成的工作。
      2. Default Liecycle 构建的核心部分,编译,测试,打包,安装,部署等等。
        Default生命周期是Maven生命周期中最重要的一个,绝大部分工作都发生在这个生命周期中,这里只解释一些比较重要和常用的阶段

        • process-resources 复制并处理资源文件呢,准备打包
        • compile 编译项目的源代码
        • process-test-resources 复制并处理资源文件至目标测试目录
        • test-compile 编译测试源代码
        • test 使用合适的单元测试框架运行测试,这些测试代码不会被打包或部署。
        • package 接受编译好的代码,打包成可发布的格式,如:JAR
      3. Site Lifecycle 生成项目报告,站点,发布站点。

        • pre-site 执行一些需要在生成站点文档之前完成的工作。
        • site 生成项目名的站点文档
        • post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备。
        • site-deoloy 将生成的站点文档部署到特定的服务器上

        常用的是site阶段和site-deploy阶段,用以生成和发布Maven站点

    4. Maven核心程序为了更好的实现自动化构建,按照这样的特点执行生命周期中的各个阶段:
      不论现在呀执行生命周期中的哪一个阶段,都是从这个生命周期最初始的位置开始执行

  7. 继承

  8. 集合

第一个Maven工程

  1. 创建约定的目录结构

    .
    ├── pom.xml
    └── src
        ├── main
        │   ├── java
        │   └── resources
        └── test
            ├── java
            └── resources
    
    1. 根目录:工程名
    2. src目录:源码
    3. pom.xml文件:Maven工程的核心配置文件
    4. main目录:存放主程序
    5. test目录:存放测试程序
    6. java目录:存放java的源文件
    7. resources目录:存放框架或其它工具的配置文件
  2. 为什么要遵守约定的目录结构呢?

    • Maven要负责我们项目的自动化构建,以编译为例,Maven要想自动进行编译,那么它必须要知道java源文件保存在哪里。
    • 如果我们自己自定义的东西想要让框架或工具知道,有两种办法
      1. 以配置的方式明确告诉框架
      2. 遵守框架内不已经存在的约定

    约定 > 配置 > 编码

常用Maven命令

执行构建过程相关的Maven命令,必须进入pom.xml文件所在的目录。

编译、测试、打包、部署....

  1. mvn clean
    清理
  2. mvn complie
    编译主程序
  3. mvn test-compile
    编译测试程序
  4. mvn test
    执行测试
  5. mvn package
    执行打包
  6. mvn install
    安装当前Maven工程
  7. mvn site
    生成站点文档

关于联网问题

  1. Maven的核心程序中仅仅定义了抽象的生命周期,但是具体的工作必须有特定的插件来完成,而插件本身并不包含在Maven的核心程序中。
  2. 当我们执行的Maven命令需要用到某些插件时,Maven核心程序会首先到本地仓库中查找。
  3. 本地仓库的默认位置:home/.m2/repository
  4. Maven核心程序如果在本地仓库中找不到需要的插件,那么它会自动连接外网,到中央仓库下载。
  5. 如果此时无法连接外网,则构建失败。
  6. 修改默认本地仓库的位置可以让Maven核心程序到我们事先准备好的目录下查找插件
    1. 找到Maven的安装目录,找到/conf/settings.xml
    2. 在settings.xml文件中找到localRepository标签,这个标签默认是被注释,你可以将它从注释中取出
    3. 将标签体内容改为你需要设置的仓库地址就可以了

学了基本东西就不学了,知道怎么用就行了我....

Q.E.D.

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

2002年4月出生于广东省 2017年学习编程至今