你的浏览器不支持canvas

做你害怕做的事情,然后你会发现,不过如此。

慕课网maven基础教程总结笔记

时间: 作者: 黄运鑫

本文章属原创文章,未经作者许可,禁止转载,复制,下载,以及用作商业用途。原作者保留所有解释权。


1.课程概述

1.1 maven快速入门

  • 介绍
    • maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。
    • maven可以帮助我们更有效的管理项目,是一套强大的自动化构件工具,覆盖了编译、测试、运行、清理、打包、布置整个项目构建的周期。它提供了一个仓库的概念,统一管理项目所依赖的第三方jar包。
  • 环境搭建
    • 首先下载maven的zip压缩包:官方下载地址
    • 下载后解压到任意目录。
    • 配置环境变量
      • 新增系统变量M2_HOME,变量值为maven的安装目录,如D:\Java\apache-maven-3.3.9
      • 在环境变量Path中添加;M2_HOME\bin
    • 在cmd中执行mvn -v,如果出现maven版本信息则代表maven安装成功。

2.maven核心知识

2.1 常用的构建命令

  • mvn -v 查看maven版本
  • mvn compile 编译
  • mvn test 测试
  • mvn package 打包
  • mvn clean 删除target
  • mvn install 安装jar包到本地仓库中

2.2 maven中的坐标和仓库

  • 坐标
    • maven中的任何一个依赖、插件、项目构建的输出,都可以被称为“构件”,所有构件均通过坐标作为唯一标识。
    • <groupId>、<artifactId>、<version>是构件的基本坐标,基本坐标是构件唯一的标识。
      <dependency>
          //groupId为公司网址反写+项目名
          <groupId>com.imooc.maven01</groupId>
          //artifactId项目名-模块名
          <artifactId>maven01-model</artifactId>
          //version是构件的版本号
          <version>0.0.1SNAPSHOT</version>
      </dependency>
    
  • 仓库
    • 仓库就是用来管理项目的依赖的,仓库分为两种,本地仓库和远程仓库。
    • 如果maven在本地仓库中找不到需要的构件,则它回去maven的远程中央仓库中查找。查找到之后会下载到本地仓库中供我们使用。如果远程仓库找不到需要的构件,就会报错。
  • 国内镜像仓库
    • maven的中央仓库不稳定,就需要更换国内镜像仓库。
    • settings.xml文件中的<mirrors>标签内增加如下标签:
      <mirror>
          <id>maven.net.cn</id>
          <mirrorOf>cenral</mirrorOf>
          <name>central mirror in chian</name>
          <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      </mirror>
    
  • 仓库的路径
    • maven从远程仓库下载的构件,默认存放在当前用户目录中,比如C:\Users\Administrator\.m2\repository
    • 实际使用中,不会将仓库放在C盘中,就需要更改仓库的默认路径。
    • 找到settings.xml文件中的 <localRepository>标签,修改如下即可:
      <localRepository>D:/Java/m2</localRepository>
    

2.3 maven的生命周期和插件

  • maven的三套生命周期:
    • clean 清理项目
    • default 构建项目(最核心)
    • site 生成项目站点
  • 这三套生命周期是相互独立的,每个生命周期又包含一些阶段。各个生命周期中的阶段是有顺序的,且后面的阶段依赖前面的阶段。执行某个阶段时,其前面的阶段会一起按顺序执行。但不会触发另外两套生命周期中的任何阶段。
  • 比如执行mvn package这个阶段时,会自动依次执行mvn compilemvn test
  • clean 清理项目
    • pre-clean 执行清理前的工作
    • clean 清理上一次构建生成的所有文件
    • post-clean 执行清理后的文件
  • default 构建项目(最核心)
    • default是生命周期中最核心的,它包含了构建项目时所包执行的步骤。阶段比较多,常用的阶段如下:
    • compile
    • test
    • package
    • install
  • site 生成项目站点
    • site 会根据pom中的一些信息自动生成一个站点,阶段如下:
    • pre-site在生成项目站点前要完成的工作
    • site生成项目的站点文档
    • post-site在生成项目站点后要完成的工作
    • site-deploy发布生成的站点到服务器

2.4 pom.xml常用元素介绍

  • pom是maven项目的核心管理文件,用于项目描述、组织管理、依赖管理和构件信息的管理。
  • 常用标签
    • <project>:是pom.xml的根元素,包含了pom的一些约束信息。
    • <modelVersion>:是一个必须的元素,指定了当前pom的版本。
    • 坐标信息标签:
      • <groupId>:主项目标识,一般为反写的公司网址+项目名。
      • <artifactId>:是模块的标识,是实际项目中的一个模块,一般为项目名+模块名。
      • <version>:表示当前项目的版本号。
      • <packaging>:是maven的打包方式,不指定时默认为jar,还可以打包成war、zip、pom等格式。
    • 项目信息标签(不重要的描述标签)
      • <name>:项目描述名,一般在产生项目文档时使用。
      • <url>:项目的地址。
      • <discription>:项目的描述。
      • <developers>:开发人员列表。
      • <licenses>:许可证信息。
      • organization:组织信息。
    • 重要的标签
      • <dependencies>:依赖列表,可以包含多个依赖项<dependency>,依赖项中使用坐标来指定依赖的位置,包含的标签如下:
      • <groupId>
      • <artifactId>
      • <version>
      • <type>
      • <scope>:指定依赖的范围。
      • <optional>:默认为false,如果为false表示依赖是被子项继承的。如果为true表示子项不继承,必须显示的引入该依赖才能使用。
      • <exclusions>:用于排除依赖传递列表,可以排除多个依赖。比如A依赖B,B依赖C,C对于A来说就是传递依赖。如果A不想依赖C,就可以使用该标签排除对C的依赖。
      • <dependencyManagement>:用于依赖的管理,可以声明依赖列表,但是它并不会被运行(不会被引入到实际的依赖中),主要是用于定义在父模块中,供子模块所继承时使用。比如多个子模块都需要使用junit,只需要在父模块中定义一次junit即可。
      • <build>:为构件的行为提供支持。
        • <plugins>:插件列表。
      • <parent>:用于在子模块中对父模块的继承。
      • <modules>:聚合运行多个的maven项,可以定义多个模块一起编译。

2.5 依赖范围scope

  • maven中提供了三种classpath,分别是编译、测试、运行。scope依赖范围就是控制依赖与这三种classpath的关系。
  • scope的值有6种:
    • compile:是默认值,在编译、测试、运行都有效。
    • provided:在编译、测试时有效。
    • runtime:在测试、运行时有效。
    • test:只在测试时有效。
    • system:作用范围和provided的作用范围一样。但是system与本机系统相关联,指的是本地的引用路径,可移植性差。
    • import:导入的范围,它只使用在dependencyManagement中,表示从其他的pom中导入dependecy的配置。

2.6依赖冲突

  • 当A和B都依赖了一个不同版本的相同构件,在C中同时依赖A和B时,C究竟是依赖的哪个版本的构件?
  • 依赖原则:
    • 短路优先:优先解析路径短的版本。
      比如:A→B→C→X(jar)A→D→X(jar)两种路径,会优先解析A→D→X(jar)
    • 先声明优先:当路径相同时,优先解析<dependencies>中先声明的构件。

2.7 聚合和继承

  • 聚合
    • 没有聚合时,如果想将多个maven项目通过install命令安装到本地仓库中,必须对多个项目依次执行install命令。maven中有种方式可以将多个项目放在一起运行,这种方式就称为聚合。
    • 新建一个maven项目,pom中实现聚合的代码如下:
      <modules>
          <module>common</module>
          <module>business</module>
          <module>test</module>
          <module>api</module>
          <module>adm</module>
      </modules>
    
    • 当对新建的maven项目执行install命令时,就会对<modules>中定义的项目依次执行install命令。
  • 继承
    • 当多个maven项目中都引用了相同的构件时,可以新建一个父级maven项目,将相同的构件放在父级的pom中统一管理。
    • 在父级pom中定义共用的依赖,如下:
      <dependencyManagement>
          <dependencies>
              <dependency>
                  <groupId>com.hyx</groupId>
                  <artifactId>hyx-common</artifactId>
                  <version>2.0</version>
              </dependency>
              <dependency>
                  <groupId>com.hyx</groupId>
                  <artifactId>hyx-business</artifactId>
                  <version>2.0</version>
              </dependency>
          </dependencies>
      </dependencyManagement>
    
    • 在子级的pom加入继承父级的代码,如下:
      <parent>
          <groupId>com.hyx</groupId>
          <artifactId>hyx-parent</artifactId>
          <version>1.0</version>
      </parent>
    
    • 这样项目就可以将父级中定义的<dependency>继承过来使用。

对于本文内容有问题或建议的小伙伴,欢迎在文章底部留言交流讨论。