欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Maven 详解

程序员文章站 2022-05-04 12:50:19
...

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

Maven 详解

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

Maven 详解

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

    首先创建MAVEN_HOME变量:

Maven 详解

​ 4. 然后创建Path:

​ 格式为:%MAVEN_HOME%\bin

Maven 详解

  1. 验证是否安装成功

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

    Maven 详解

Maven库

Maven库的概念

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

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

远程库

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

Maven 详解

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

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

本地库

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

配置Maven仓库

配置本地仓库

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

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

Maven 详解

配置远程仓库

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

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

Maven 详解

阿里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

Maven 详解

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

Maven 详解

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

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

Maven 详解

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

Maven 详解

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

Maven 详解

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

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

Maven 详解

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

Maven 详解

Maven项目的目录结构

Maven 详解

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

​ -main: 放置源代码

​ -Java:包和源代码

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

​ -test:测试代码

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

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

target:编译输出路径

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

编译

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

Maven 详解

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

Maven 详解

清除target

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

Maven 详解

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

测试

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

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

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

Maven 详解

执行 mvn test:

Maven 详解

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

打包

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

Maven 详解

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

Maven 详解

安装

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

发布

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

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

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