mavn-settings.xml配置文件

第一步 简介

在Maven基础概念和安装配置一文中,我们简单学习了Maven是什么,安装包里边的各个文件夹都存放着哪些东西,并且进行了简单的安装配置。在本文中,我们将进一步学习了解何为Maven仓库以及Maven的配置文件settings.xml如何配置。

第二步 Maven的仓库

Maven用来存储依赖和插件的一个统一的地方,称之为仓库,Maven仓库又分为本地仓库和远程仓库。远程仓库又分为私服和中央仓库等。
我们以一幅图来表示它们的关系:

在这里插入图片描述

第三步 本地仓库

就是maven在本地(我们的计算机上)存储构件(依赖的Jar包等)的仓库,默认是在用户的.m2/repository/目录下。需要注意的是刚开始在.m2/下边是没有这个repository/文件夹的,当我们在命令行中运行mvn命令后才会出现该文件夹,并且在该文件夹下存储我们从远程仓库下载的构件。
————————————————

】

既然Maven默认在/.m2/repository/下存储依赖和构件,那么我们是不是可以改变自定义这个位置?

答案是肯定的,注意看图中的/.m2/settings.xml 该文件是maven的配置文件,我们可以在该文件中通过标签来配置本地仓库的位置。(settings.xml文件是啥?其作用是啥?我们需要如何配置将在下边详细讲解)

第四步 远程仓库

远程仓库又分为中央仓库,私服以及其它公共库,我们也借用一幅图来阐述它们之间的关系。

在这里插入图片描述
由图中可以看出,我们Maven用户是在和私服打交道,包括上传和下载构件,当私服满足不了我们的下载构件需求时,私服会和中央仓库或者其余公共仓库交互,将用户需要的构件缓存在私服仓库中。那么何为私服?

第五步 私服

私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的Maven用户使用。 局域网使用搭建maven私服的好处:
1).节省外网带宽:减少重复请求造成的外网带宽消耗,将大部分构件缓存在私服,用户和私服的交互走局域网。
2).加速Maven构件:如果项目配置了很多外部远程仓库的时候,构建速度就会大大降低,因为外网下载速度很慢。
3).部署第三方构件:有些构件无法从外部仓库获得的时候,可以把这些构件部署到内部仓库(私服)中,供内部maven项目使用。
4).提高稳定性:避免当外网不稳定的时候,maven构建也变的不稳定的情况。
5).增强控制:在公司内部可以访问私服可以通过配置用户名和密码来增强权限控制。
6).降低中央仓库的负荷:maven中央仓库被请求的数量是巨大的,配置私服也可以大大降低中央仓库的压力

第六步 中央仓库

Maven提供了一个中央仓库,其地址为:http://repo.maven.apache.org/maven2 ,该仓库包含了绝大多数流行的开源Java构件,以及源码、作者信息、SCM、信息、许可证信息等。据统计,每个月中央仓库大概会接受全世界Java程序员大概1亿次访问,其重要性不言而喻。 在上一节Maven基础概念和安装配置教程 中,我们提到了maven的超级pom也是一种约定,所有的maven项目的pom文件都继承于该超级pom。(超级pom文件位于你的安装目录/apache-maven-3.2.5/lib/maven-model-builder-3.2.5.jar包中,并且在org/apache/maven/model/pom-4.0.0.xml路径下)在超级Pom中,对于中央仓库进行了配置,如下所示:

在这里插入图片描述

注意看该配置中的标签,该标签设置为false,表示我们不从该仓库中获取不稳定的SNAPSHOT版本的构件;其实还有一个标签,表示我们是否从该仓库中获取稳定版本的构件;

第七部 远程仓库的配置如下:

在这里插入图片描述

标签:表示Maven从远程仓库检查更新的频率, 默认值是daily ,表示每天都检查一次;never-从不检查;always-每次构建都检查更新;interval n-每隔n分支检查一次更新。

标签:表示maven检查和检验文件的策略,warn为默认值,还可以选择ignore和fail,表示当maven检查检验和文件失败之后应该采取的行动。

既然我们配置了远程仓库,那么是不是也需要在某个地方进行远程仓库的权限认证?否则谁都可以下载上传构件岂不是一件很麻烦的事?

答案当然也是肯定的,我们需要远程仓库的权限认证。我们可以在settings.xml配置文件中配置来搞定

在这里插入图片描述
需要注意的是:这里的archiva.snapshots必须与POM中需要认证的repository元素的Id一致,这样maven才能知道我们的用户名和密码是在认证哪个仓库。

配置了远程仓库并且进行了仓库的权限认证,maven已经可以帮助我们自动下载所需的构件了,当我们准备把自己的构件上传到远程仓库供别人使用时,我们还需要使用来搞定。

在这里插入图片描述
配置了之后,我们可以通过mvn deploy将本地的构件发布到远程仓库中。

第八步 setting.xml 配置介绍

当我们下载安装好Maven时,在其安装目录的conf下存在一个settings.xml的配置文件,这是一个全局的maven配置文件,为了不影响这台计算机上的其他用户,一般选择将该文件copy到 ~/.m2/下边,作为一个用户层面的配置文件。

settings.xml文件中主要包含以下的元素:

localRepository:本地仓库的目录。默认是用户目录下面的.m2/repository目录。

interactiveMode:表示是否使用交互模式,默认是true;如果设为false,那么当Maven需要用户进行输入的时候,它会使用一个默认值。

offline:表示是否离线,默认是false。这个属性表示在Maven进行项目编译和部署等操作时是否允许Maven进行联网来下载所需要的信息。

mirrors:定义一系列的远程仓库的镜像,用于缓解远程仓库的压力。

profiles:用于指定一系列的profile。

activeProfiles:指定当前正在活跃的profile。

servers:表示当需要连接到一个远程服务器的时候需要使用到的验证方式。

接下来我们给出一个settings.xml的简单的配置文件示例:

在这里插入图片描述

下边我们重点说两个比较有用的配置:

:镜像,如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像。说白了,任何一个可以从仓库Y获得的构件,都能够从它的镜像中获取。在上边的示例中,我们使用中配置的http://nexus.d.xxx.net/nexus/content/groups/public来代理所有的远程仓库,其实这个代理一般情况下是你们公司的内网搭建的私服,在局域网内,加快访问速度等作用。

profiles: 可以配置构件和插件的远程仓库,并且可以通过来配置多个profile,最后通过来指定当前处于活跃状态(即有效的)的profile配置是哪一个。

第九步 maven仓库repositories和mirrors的配置及区别详解

仓库配置优先级为:pom.xml > 用户目录自定义 ~.m2/setting.xml > 全局mavn setting.xml 配置 > mirror 镜像,相同的会覆盖,不同的会合并
如果repository 中的id 与 mirror 镜像id相同,进行url 覆盖

1)通过mirror配置

如果仓库X可以提供仓库Y所有的内容,那么我们就可以认为X是Y的一个镜像,通俗点说,可以从Y获取的构件都可以从他的镜像中进行获取。可以采用镜像的方式配置远程仓库,镜像在settings.xml中进行配置,在setting.xml中的标签下加入如下子标签配置便配置了一个maven镜像。

在这里插入图片描述
添加如上配置后,maven会读取setting.xml中配置的mirror作为jar包的下载地址,我们以在项目中下载fastjson为例来看一下效果。

在这里插入图片描述
可以看到,配置了上面的mirror后,maven是从aliyun仓库下载的jar包,不配置的时候,默认从apache的maven中央仓库下载的jar包。
上面提到,的设置很重要,比如上面我设置的mirrorOf为central,如果我随便设置一个参数,如abc,这时候我们配置的仓库就不起作用了,这是因为maven默认内置了如下一个仓库,在mavn 超级pom.xml 中定义,这个默认仓库的id为central,当我们把mirrorOf设置为central时,maven就会查找有没有id为central的仓库,然后把id为central的仓库地址换成我们标签配置的那个url,这样我们配置的mirror才会起作用。当然我们也可以把mirrorOf设置为*,表示所有仓库都使用我们配置的这个mirror作为jar包下载地址。

在这里插入图片描述

2)通过pom.xml 配置

通过setting.xml方式配置会对所有maven项目生效,如果只想在本项目中配置一个maven仓库,可以通过在pom.xml中配置标签来实现。在自己的maven项目的pom.xml中添加如下配置,就配置好了一个仓库。这时候,maven会优先采用这个配置,而不会去读setting.xml中的配置了。这样配置好后,maven就会自动从aliyun下载jar包了。

在这里插入图片描述

  1. repository 加载顺序

我们知道,repositories标签下可以配置多个repository,如果我们配置了多个repository,maven会用哪个呢,答案是按出现顺序使用,如果第1个可用,就用第一个,如果不可用,就依次往下找,下面的2张图片可以说明这个问题。

在这里插入图片描述
上面配置时似乎也没什么用,确实是,如果你只是在pom.xml中配置个仓库,这个id是没什么用的,可以随便写,其实这个id是配合上面讲的mirror一块使用的,还记得mirrorOf吗,我们配置mirrorOf为central是,mirror中的url就是central仓库的url给覆盖了,所以这里的标签下的id是给mirrorOf用的。
可以看下面一个例子,本来我们的abc-releases这个仓库是不可用的,因为根本就没有https://abc.def.com/repository/public/这个仓库,但是我们通过mirror配置,改变了id为abc-releases这个仓库的url,从而使用maven也可以从id为abc-releases这个仓库下载jar包了。当然这样配置也没只啥意义,只是为了方便理解repository和mirror之间的关系

在这里插入图片描述
4)maven仓库配置的其他选项
在这里插入图片描述
5) maven默认的内置仓库的配置位置

在这里插入图片描述

第十步 总结

这篇文章我们简单了解了maven的仓库,以及如何配置远程仓库,包括私服镜像和远程仓库的认证等知识点。当我们真正入职某一家公司的时候,我想很重要的一件事就是对着身边的一个哥们说:“Hi,老哥,把你的settings文件给我一份呗”

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吹老师个人app编程教学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值