Maven学习(1) 下载以及相关配置

        我在Java上面已经有了三四年经验了,但是在Maven上面踩了不少的坑,踩坑的主要原因还是对Maven的一些基础概念以及相关配置不太熟悉,所以打算写下关于Maven的系列文章。

Maven是什么?

        按照我对Maven的理解,简单来说Maven是一个项目管理的工具。

        简单来说就是通过Maven可以更为轻松的构建和管理项目,Maven可以帮助开发者进行项目开发过程中依赖的下载和管理,代码的编译、测试、打包的一系列过程。当然Maven还有一些额外的功能,不过Maven主要的作用就是构建和管理项目。

        这么说会很抽象,后面的文章会详细介绍下Maven的具体使用方式

下载

Maven – Download Apache Maven

这里是Maven的下载界面,截止到2021-09-23,最新的Maven版本是3.8.2,需求的JDK是1.7。

可以看到有很多个文件,但是实际需要下载的就一个。

Checksums 和 Signature 类似文件的签名,用于校验下载的文件是否是正确的,是否别人篡改过,因为是在官网下载的所以不用管。

下面两行Source是Maven的源代码,下载后还需要经过编译才能使用,而Binary经过编译后可以使用的代码,因为是使用的的原因,所以下载Binary版本就行。

tar.gz archive 和 zip archive 经过不同压缩方式生成的包,tar.gz是Linux常用的压缩方式,而Windows习惯使用zip的压缩方式,看具体的操作系统下载对应的压缩包。

其它版本的下载

如果要下载其它版本的

Maven版本和对应的Jdk版本在ReleaseNote下面可以看到

Maven – Maven Releases History

如果要下载旧版本的Maven,先返回下载界面。

然后滑下去点击这个链接,就可以下载Maven的历史版本,历史版本也是下载Binary文件。

环境变量配置 

下载之后先解压文件到特定目录,然后配置Maven的环境变量,这一步的主要目的是能够在cmd命令行中直接运行Maven的指令mvn。

右键我的电脑,属性,选择高级系统设置,然后选择环境变量。

 

 

环境变量有两种,一种是用户变量、一种是系统变量。

用户变量配置后只对当前系统用户生效。

系统变量是配置后对所有用户都生效的配置。

比如现在以a用户在用户变量中配置了Maven的路径,那么可以用a账户登录时可以在cmd中运行mvn指令,但是如果切换到了b 用户,在cmd中运行mvn会显示该指令无效。

但是如果a用户把Maven路径配置到系统变量中,那么切换到b用户可以运行mvn指令。

大部分人都是只用一个超级管理员登录使用系统的,怎么配置都没关系。演示就直接配置到系统变量。

先新建一个变量MAVEN_HOME,变量值为maven压缩包解压的文件路径。

如果使win10的话可以直接打开已有的变量Path,增加一个值

%MAVEN_HOME%\bin

如果win7或者更老的系统,打开Path变量之后只有一值直接 在已有的值后面追加(注意比Win10配置的开头多了一个分隔符  ;,表示与前面的值分开)

;%MAVEN_HOME%\bin

然后保存,保存之后就可以直接在cmd中运行maven的指令mvn了

配置环境变量的原理

这里另外讲下环境变量的原理。

在cmd输入一个命令的时候,windows会先在cmd当前所处的文件夹下面搜索和输入命令名相同的可执行文件(cmd、exe、bat等),如果找不到就会到环境变量Path配置的路径列表下找可执行文件,如果还是找不到就会报错,说找不到可执行的文件。

打开maven路径下的bin文件夹,可以发现里面有个mvn.cmd文件,这个就是输入mvn命令后实际执行的文件。

配置环境变量中的Path就是告诉操作系统要在哪些路径下找执行命令的文件。

我们先配置了一个MAVEN_HOME变量,然后在Path变量中增加了一个

%MAVEN_HOME%/bin。

这个用到了占位符,系统会自动把MAVEN_HOME变量的值替换成环境变量MAVEN_HOME的值,得到最后的路径。

但是这样的话直接在Path中配置配置Maven下的bin文件夹的全路径名就可以了,为什么还需要额外搞一个MAVEN_HOME变量呢?主要有以下几个原因。

1.可以通过MAVEN_HOME变量看到maven的安装路径,不用到Path中去翻。

2.如果要切换maven的安装路径,直接改MAVEN_HOME的值就可以,不用动Path的值,改起来比较方便。

3.MAVEN_HOME还起到定位配置文件位置的作用。

换源

maven配置项目的过程需要下载一些库或者组件,但是需要到外网下载,因为一个众所周知的原因下载外网的东西会很慢,所以需要换源,使用国内一些大学或者公司提供的源来加快下载库的速度。

换源前需要了解下Maven的库管理机制,避免后面踩坑。

使用Maven运行一个项目主要下载的东西有两种,一种是依赖(dependency),一种是插件(Plugin)。

依赖是项目运行过程中需要使用到的各种库,比如mysql的jdbc驱动库就是一个依赖。

插件是实际执行编译、打包这些操作的java程序,比如用于执行编译操作的maven-compiler-plugin。

依赖和插件可以统称为构件(Aritificial)。

在Maven中存储构件的地方叫仓库(Repository)。

在配置文件中对依赖的仓库使用<repository>标签声明,对插件的仓库使用<pluginRepository>标签。除非特别说明,下面提到的Repository包括了这两者。

仓库大致可以分为两种

本地仓库(Local Repository),存储在本地计算机某个目录下的参控股,本地项目运行的时候可以使用本地仓库中的构件。

远程仓库(Remote Repository),远程服务器上的仓库,当在本地仓库找不到构件的时候就会到远程仓库中把构件下载到本地仓库。

远程仓库中有一个仓库比较特别,就是中央仓库(Central Repository),在不进行任何配置的情况下,Maven会到这个仓库去找需要的构件,而且很多情况下大部分构件也是从中央仓库下载的。

以上图为例子,某个项目声明需要构件1,构件2。

本地仓库已经有了构件1,所以直接使用本地仓库的即可。

构件2不在本地仓库中,这个时候就就需要到远程仓库去找,这是可能配置有多个仓库,Maven会按照一定的规则遍历这些远程仓库,直到在某个仓库找到需要的构件,如果遍历完所有仓库都找不到需要的构件,这个时候Maven就会抛出异常。

如果Maven在某个仓库中找到了需要的构件,比如在中央仓库中找到了构件2,那么Maven会把构件2下载到本地仓库,这样项目就可以使用构件2了。

前面提到过很多时候Maven是下载中央仓库中的构件,但是因为国内访问中央仓库的地址的速度很慢。这个时候就需要配置镜像服务器来加快下载速度。

在Maven中可以配置仓库的镜像(Mirror),镜像的作用是拦截对特定的仓库对应地址的访问,重定向到镜像标签中的配置的地址。   

一个Mirror标签如下:

<mirror>
    <id>aliyunmaven</id>
    <mirrorOf>central</mirrorOf>
    <name>阿里云公共仓库</name>
    <url>https://maven.aliyun.com/repository/public</url>
</mirror>

标签内容说明如下:

id:唯一标识符,用区分不同的Mirror。

name:Mirror的名称。

mirrorOf  该Mirror所拦截的Repository的id,多个Repository的id用逗号隔开。

url  该Mirror所重定向的地址的Url。

这个Mirror标签会拦截对id为central的Repository(即中央仓库)的访问,使其重定向到阿里的镜像。重定向的地址为

https://maven.aliyun.com/repository/public

现在把这个Mirror标签放到放到配置文件中使其生效。

Maven有两种配置文件, 一个是用户配置文件、一个是全局配置配置文件。

用户配置的位置为${user.home}/.m2/settings.xml下,只对当前系统用户生效。

全局配置的位置为 $MAVEN_HOME/conf/settings.xml,$MAVEN_HOME即全局系统变量中的MAVEN_HOME,对系统中的所有用户都生效。如果两个配置文件中有重复配置取用户配置文件的配置。

他们的关系与刚才配置环境变量时用户变量及环境变量的关系类似。对大多数人来说直接改系统配置就可以了。

使用编辑器(我是用NotePad++)打开$MAVEN_HOME/conf/settings.xml。

下面红框中是Maven的本地仓库的默认存储位置,我另外配置了本地仓库的位置。

然后滑下去,直到Mirrors标签,把刚才的Mirror标签放进去。保存文件并退出就可以生效。

额外说明的几点内容:

1.该标签只是拦截了对中央仓库的访问,还有一些构件是在别的第三方仓库下载的(比如JBoss的仓库),这个时候还是访问仓库原来的地址,所以可能会出现下载某些构件的时候速度还是很慢的情况。如果阿里镜像有这个构件,可以把对应仓库id加到mirrorOf标签中。

2.网上有些换源的文章会把mirrorOf的值设置为*,即把对所有仓库的访问都重定向到阿里源的地址中。这是一种我不太建议的做法,因为阿里云镜像不一定有项目需要的构件,这样配置可能会导致一些构件下载不到,进而导致Maven初始化项目的时候报错。

3.截图中有另外一个Mirror,这是3.8.1版本之后配置文件中自带的,该Mirror拦截了所有http请求的repository,因为使用http请求有漏洞,会导致电脑被攻击。这个配置可能导致无法访问一些内部的仓库,因为有些公司把内部仓库设置为http请求,可以把该Mirror注释掉来解决这个问题。

IDE配置

虽然已经在maven配置文件做了修改,不过IDE这边也要坐下调整,我这边以常用的IDEA为例子。

打开IDE,然后点击红色箭头指向的配置项,这是用于新项目的配置,如果要设置当前项目的配置,可以选择上面的Setttings。

Maven相关的配置位置如图中所示,IDEA自带了一个默认的Maven,先把把Maven设置成刚才下载的Maven。这样我们刚才配置的maven文件才可以生效。

然后是用户配置文件位置和本地仓库位置这两个配置。

用户配置文件的位置可以不用改,因为我们刚才改了全局配置文件,这个对IDEA是生效的。当然为了防止后面混淆可以设置成全局配置文件的位置。

但是本地仓库必须要改成刚才在配置文件中配置的本地仓库,因为IDEA不会读取配置文件中本地仓库的配置。要么就是默认的本地仓库,要么就使用这里配置的本地仓库。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值