Maven 应知应会

写在前面的话,该文档是本人在学习 Maven 过程中学习笔记,所以在这里不再重复讲 Maven 的演进历程等等各种背景问题。只是单纯的记录一下自己在学习过程中遇到的各种问题,或者说是各个阶段中,遇到的各种问题,是怎么解决的。很多同学可能会因为和我的系统不一致、ide 版本不一致、maven 版本不一致而出现各种问题。这里我说一下,请自行百度。要知道这只是一个学习笔记。

Maven 快速入门

既然是快速入门肯定要从部署开始讲起

Windows 环境上安装 Maven

Maven 依赖于 JDK ,如果想要安装 Maven 必须在本地已经安装了 JDK,我手头的开放电脑有一台 Windows10、一台 iMac,所以这里我简单分享一下在这两个系统上如何安装 JDK 和 Maven

Windows 环境下部署 JDK

  1. 首先第一步肯定是去下载jdk,直到我写这篇学习笔记位置,jdk 已经更新到了 12 版本,但是由于我们的服务器上还是用的 jdk1.8,为了保证一致性,我这里也是安装 1.8。其实我相信绝大部分公司用的也是 jdk1.8。下载地址:jdk1.8下载地址。点击选择Accept License Agreement后,我的电脑是 Windows10 64 位,所以我选择Windows x64。点击下载即可。
  2. 双击下载完成的 jdk 安装包,然后执行安装操作,制定 jdk 和 jre 的安装路径,我个人是直接安装在了 c 盘的默认路径下。
  3. 配置环境变量,右键我的电脑选择属性,然后选择高级系统设置选择环境变量设置。
  4. 新建一个系统变量命名为 JAVA_HOME,变量值设置为刚才安装 jdk 的路径,点击确定。
  5. 在 Path 中新增一个路径,值为%JAVA_HOME%\bin,点击确定按钮
  6. 使用 win+r 呼出运行界面,输入 cmd ,呼出操作cmd.exe 操作页面。输入 java -version 如果有正确的返回结果,返回结果中至少包含java version "1.8.***"字样,则说明安装成功了。
  7. 关闭 cmd 操作页面。如果不关闭的话,等配置完 mvn 之后也需要关闭再重新开一个,容易出现明明配置已经配置上了但是找不到这个命令的情况。

好了,到目前为止 jdk 已经部署成功。

Windows 环境下部署 Maven

  1. 不用想,第一步肯定还是去下载。maven 官网下载页面。这里因为大家用的 maven 版本肯定不一样,我直接把官网粘贴出来,可以在这个页面上选择要下载的版本。需要下载的朋友,在下方 Link'中选择 apache-maven-版本号-bin.zip。这个是 Windows 版本的
  2. 下载下来的是一个 zip 文件,双击打开,随便你解压什么位置。只要在你本机而且你自己能找到就可以了。
  3. 配置环境变量,右键我的电脑选择属性,然后选择高级系统设置选择环境变量设置。
  4. 新建一个环境变量 M2_HOME,变量值设置为你maven 所在地址。包含 maven 本身文件夹
  5. 这里补充一下,前面说过了 Maven 也是基于 jdk 的,所以部分时候也需要设置的他的堆内存大小,这个看情况,不设置也行,这里简单说一下我是怎么设置的。新增一个环境变量 MAVEN_OPTS,值设置为-Xms=128m -Xmx=521m
  6. 在 Path 中新增%M2_HOME%/bin
  7. 呼出运行页面执行 cmd,运行 mvn -v,如果可以正确打印出 maven 版本信息就是对的
  8. 关闭 cmd 窗口

Mac 环境上安装 Maven

Mac 上部署 jdk

  1. 下载和 Windows 系统上差不多,但是选择的下载文件不是 Windows X86 了,而是Mac OS X

  2. 部署到某个位置

  3. 执行 vim .base_profile

  4. 编辑内容为

    JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home
    PATH=$JAVA_HOME/bin:$PATH:.
    CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:.
    export JAVA_HOME
    export PATH
    export CLASSPATH
  5. :wq 保存并推出后执行source .bash_profile 使其生效,执行 java -version,如果可以正确返回 jdk 版本号,则说明安装成功

Mac 上部署 Maven

  1. 下载和 Windows 系统上差不多,但是选择的下载文件是apache-maven-3.6.3-bin.tar.gz

  2. 部署到某个位置

  3. 执行 vim .base_profile

  4. 新增内容为

    export M2_HOME=/Users/qiqi/Jason/software/apache-maven-3.6.1
    export PATH=$PATH:$M2_HOME/bin
  5. :wq 保存并推出后执行source .bash_profile 使其生效,执行 mvn -v,如果可以正确返回maven版本号,则说明安装成功

  6. 如果想要设置其内容使用大小和 Windows 命令是一样的。这里不再重复了

这里简单提一下,如果你在使用 vim 修改文件的时候,不小心搞坏了,我建议直接放弃保存重新修改。放弃本次编辑并推出的命令是:q!

Maven 的体系结构

Maven 安装之后是怎么运行的?或者是 Maven 是怎么帮助我们拉去代码的。这里分享一张图片。

我这里简单解释一下,我们的 maven 肯定是部署在自己的电脑上的嘛。然后 maven 有自己的 setting.xml 文件,里面默认是没有声明远程仓库的地址的。但是他仍然可以从远程仓库中获取jar 包,这是因为 M2_HOME/lib/下的 maven-model-bulider jar 包中有一个超级 pom,这里声明了 Maven 中的中央仓库地址。说到这里,那我们再简单来说说这种情况下,我们拉去包的时候,maven 体系结构都干了什么。

  1. 解析 setting.xml 中的配置文件
  2. 解析项目中的 pom.xml 查看需要哪些依赖
  3. 去本地 maven 仓库中查看这些依赖的 jar 包是否存在,如果不存在则去远程仓库拉取
  4. 将拉取下来的jar 包保存到本地依赖中方便下次使用

这里再多说一嘴,由于Maven 的这个远程仓库是部署在国外的,所以我们在国内访问起来特别费劲,速度特别慢。所以大部分软件工程师会再不使用私服的前提下(因为私服一般都会自动帮你配置好国内的中央镜像仓库访问地址)直接只用国内的镜像仓库,比如 aliyun 的镜像仓库。可以再 setting.xml 文件中mirrors 元素下新增


    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>        
    </mirror>

依赖管理

坐标

什么是坐标

简单来说就是 Maven 通过给定的坐标地址可以从仓库中唯一的获取的地址。

Maven 中坐标的主要组成部分

Maven 中的坐标主要是由四个部分组成的 groupId artifactId version packaging 。

简单解释这四个部分

名称 说明
groupId 声明当前 maven 隶属的项目
artifactId 声明实际项目的模块名称
version 声明版本
packaging 声明该项目的打包方式(pom/jar/war,默认为jar)
classifier 声明统一 POM 构建的不同内容的构建

groupId、artifactId、version简称为GAV。

classifier这个用的比较少,所以这里特别说明一下,有些 jar 包的配置是又不同组成部分的,比如说源代码、javadoc 、甚至支持不同的 jdk 版本等等,这里我们举一个最简单的例子来看一下,假设我现在需要引用 net.sf.json 包。

如果我想要的是 jdk15 版本的,我可以这么声明。

<dependency>  
    <groupId>net.sf.json-lib</groupId>   
    <artifactId>json-lib</artifactId>   
    <version>2.2.2</version>  
    <classifier>jdk15</classifier>    
</dependency>  

去哪里获取 Maven 的坐标

方法有两个,第一个就是对去对应的官网上找,大的框架一般都有自己的官方网站吗,而官方网站上通常都会声明其 Maven 坐标地址。

而如果你引用的 jar 没有官方网站,你可以去 maven 坐标查询网站 自行搜索关键词查找。

依赖管理机制

依赖范围

Maven 使用scope用来控制依赖和编译、测试、运行的 classpath 的关系。具体的依赖包含以下四种:

  1. compile:默认选项,对编译、测试、运行三种 classpath 都有效
  2. test:测试依赖范围,只对测试 classpath 有效,比如 junit
  3. provided:对于编译、测试 classpath 有效,但是对运行无效,因为容器已经提供,比如 servlet-api
  4. runtime:运行时提供,比如 jdbc 驱动
  5. system:系统范围,自定义构件,指定systemPath;跟provided 相似,但是在系统中要以外部JAR包的形式提供,maven不会在repository查找它。
  6. import:只使用在 中,表示从其它的pom中导入dependency的配置。

img

传递性依赖

可选依赖

依赖冲突

排除依赖

Maven 仓库

maven 的多层仓库架构

nexus 私服搭建

nexus 私服中的仓库架构

nexus 上配置企业级仓库架构

强制maven 项目走私服下载

理解 nexus 权限管理机制

使用 Nexus 管理员账号将工程部署到私服中

nexus 日常任务管理

Maven 生命周期

Maven 生命周期

Maven 插件运行原理

架构师角度

多模块统一构建

通过集成实现多模块依赖版本强统一

import pom 强制约束已来访版本号

什么是版本管理什么是版本控制

基于资源过滤 + profile 功能自动配置各种发布环境

创建一个 maven 骨架

常用插件入门

surefire 单元测试覆盖率

jetty 本地启动 web 服务进行测试

cargo 对 web 服务进行自动化部署

猜你喜欢

转载自www.cnblogs.com/joimages/p/12044547.html
今日推荐