Maven 详解

Maven 详解

​ Author:赵利文

​ 2020-5-19 17:52

Maven概述

简介

​ Maven是一款基于POM(项目对象模型:Projcet-Object-Model)的项目管理工具。

Maven解决的问题

​ 在没有Maven之前,在做软件项目的开发过程中,会导入一些依赖jar包。如果只有你一个人开发,并且jar包比较少还好说。但是上升到团队开发,不同团队成员开发不同的模块,模块之间还会依赖相同的jar包,而且这些jar包的版本可能每个人使用的还不一样,这样可能会在项目开发和整合的过程中,造成团队代码复用性低、jar包冲突和兼容性等一系列问题。造成项目管理效率低,开发团队协同不顺畅等问题。更有可能,成员之间的沟通就占到了整个工作时间的一半。

​ 基于此,Apache软件基金会开发了用于构建和管理软件全生命周期的Maven。

Maven起到的作用

  1. 简化你的jar包使用

    在pom.xml文件中,配置简单的资源描述信息,由maven自动帮你完成jar包的下载和导入。

  2. 提高团队协作的效率

    极大简化团队的协作过程。通过依赖机制,完成jar包的管理;通过继承机制,解决了版本统一问题。

Maven的安装配置

  1. 登录官网,下载软件压缩包:https://maven.apache.org/download.cgi

image-20200519182749943

  1. 下载完之后,将压缩包解压到本地任意磁盘目录:

image-20200519183042523

  1. 将bin文件夹添加到环境变量:

    首先创建MAVEN_HOME变量:

image-20200519183241135

​ 4. 然后创建Path:

​ 格式为:%MAVEN_HOME%\bin

image-20200519183338289

  1. 验证是否安装成功

    如果可以打印出版本信息,代表安装成功:

    image-20200519183813067

Maven库

Maven库的概念

​ 使用Maven进行项目管理,其中Maven本身的插件库、项目代码依赖的jar包等都作为资源保存在一个磁盘目录中(远程或本地)。那么可以简单理解为,这些存放资源的物理空间,称之为Maven的库(Repository)。

​ Maven中包含远程库和本地库。

远程库

​ 保存在远程服务器中的Maven资源库,可以被Maven客户端(开发者)连接并为Maven提供所需资源。

image-20200519191436357

ps:Maven默认使用的远程库叫Maven的中央库,由Maven社区维护,将全世界常用的库放置在中央库中供大家使用。但是普通用户只有读取权限,不可以放置自己的资源。也就是说,人家有哪些资源,你就只能下载哪些资源。而且Maven的中央仓库在国外,国内连接下载资源速度太慢。

为了弥补中央库的不足,国内有些企业创建了自己的私服作为代理服务器,比如阿里、网易。其中不仅有Maven中央库的资源,而且还提供了额外的满足本国开发者常用的资源。这个让我想到了Java中的代理设计模式,通过切面(私服)对切入点(访问资源)进行功能增强。

本地库

如果远程仓库的资源每次创建项目都要重新下载,势必会对网络资源造成浪费,而且下载时间也是对开发时间的占用。所以Maven将下载过的资源存放在本地,下次在获取资源之前会首先检查本地是否存在,如果存在就直接使用本地资源,如果不存在才会去远程仓库下载。

配置Maven仓库

配置本地仓库

打开Maven更目录->conf->settings.xml

在55行的位置,使用<localRepository标签> 配置Maven本地仓库,如下图所示:

image-20200519195456614

配置远程仓库

就像上面所提到的,Maven中央仓库比较慢,可以配置国内的私服,提升下载速度:

如图:在<mirrors> 中,我们用阿里的Maven镜像替换原有镜像:

image-20200519195734271

阿里Maven镜像的具体配置内容为:

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

Maven的生命周期

万事万物都有生命周期。植物生长的从生到死会经历发芽、生长、开花、结果、枯萎等环节。

Maven作为项目管理工具,负责项目从无到有的每一个环节,这个过程就是Maven的生命周期(Life Circle)。

一个Maven的生命周期包括:创建、编码、编译、测试、打包、安装和发布。

创建

在一个工作空间中创建一个maven项目,命令为:mvn archetype:generate

image-20200519201458257

以上命令会执行构建maven骨架的操作,期间Maven会下载相关依赖jar包,执行到以下这一步,我们会看到Maven为我们提供了10种骨架,默认为我们选择的是第7种:quickstart

image-20200519205937461

我们选择默认,回车下一步。

到这一步,需要输入groupId,代表组织ID,这个一般输入公司域名倒写,因为是演示,我输入我名字拼音到倒写:

image-20200519210735914

artifactId可以理解为模块或项目的名称:

image-20200519212808705

项目版本,不写默认为:1.0-SNAPSHOP

image-20200519212833450

以上三个信息(组ID 、模块名称、模块版本号), 可以唯一确定一个项目的"坐标",也就是项目的标识。

package ,如果不写,默认是groupId:

image-20200519213302906

这样就创建好了一个基于quickstar骨架的java项目:

image-20200519213546957

Maven项目的目录结构

image-20200519213929866

src 目录放置的是项目代码。

​ -main: 放置源代码

​ -Java:包和源代码

​ -resources :放置配置文件,比如springmvc.xml、applicationContext.xml等等

​ -test:测试代码

​ -Java:用于测试的包和源代码

​ -resources:同样是放置配置文件的位置,如果不写,默认读取main目录下resources下的配置文件信息。

target:编译输出路径

pom.xml Maven的核心配置文件,后期依赖的jar包资源就在这里配置,当然还可以配置一些其它参数。

编译

进入刚才我们创建的项目目录,执行 mvn compile ,可以对项目代码进行编译。

image-20200519215349782

我们看到,编译之后,生成了target目录,在上面讲目录结构的时候提到过target目录的作用,这里就不在赘述了:

image-20200519215432712

清除target

target保存了项目的输出文件,一般在调用命令生成target执行之前,先清空这个目录,保证输出的编译文件是最新的,执行命令mvn clean:

image-20200519215841742

ps:我们发现,在执行mvn clean的时候,Maven会下载相关jar,说明maven自身执行的命令也会依赖相关资源,所以在Maven中,一切皆资源。

测试

​ 我们在开发项目的过程中,要进过很重要的代码测试阶段,保证程序的准确性和健壮性。

​ 在maven中为我们提供了测试的命令,而且生成了全面的测试包包,方便开发人员定位问题。

我们将项目的代码故意写错:

image-20200520181331840

执行 mvn test:

image-20200520180924958

会发现maven将编译出错的测试报告进行了输出。

打包

当项目编写完毕,测试完毕,需要将代码打包成jar供别人使用,或者打包成war部署到服务器,需要执行 mvn package命令:

image-20200520181445985

我们在执行打包命令时,还发现maven帮我们执行了测试,如果你觉得测试环节已经没有问题了,不需要浪费测试环节,而且同时执行clean操作,可以通过组合命令:mvn clean package -DskipTests :

image-20200520181935983

安装

如果我项目的某一模块,需要打包成jar包作为资源上传到私服供其他人使用,而且该资源的结构需要满足Maven的规范才能让Maven进行正确的识别和管理。这时就需要进行安装的操作,使资源具备能够让其他人通过Maven正确使用的目录格式。命令格式为:mvn install

发布

执行完安装任务,就可以将资源发布到私服供其它人引用了。因为我这边没有私服地址,所以具体演示就不进行了。

具体发布的命令格式为: mvn deploy

先介绍到这里,后期将补充IEDA集成Maven的方式。以及Maven 的依赖 继承 聚合的概念。敬请期待~

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值