仓库详解

maven 项目

maven采用引用的方式将依赖的jar引入进来,不对真实的jar进行拷贝,但是打包的时候,运行需要用到的jar都会被拷贝到安装包中。

Maven寻找依赖的jar

maven官方为我们提供了一个站点,这个站点中存放了很多第三方常用的构建(jar、war、zip、pom等等),当我们需要使用这些构件时,只需将其坐标加入到pom.xml中,此时maven会自动将这些构建下载到本地一个目录,然后进行自动引用。

上面提到的maven站点,我们叫做maven中央仓库,本地目录叫做本地仓库。

默认情况下,当项目中引入依赖的jar包时,maven先在本地仓库检索jar,若本地仓库没有,maven再去从中央仓库寻找,然后从中央仓库中将依赖的构件下载到本地仓库,然后才可以使用,如果2个地方都没有,maven会报错。

Maven 仓库

在 Maven 中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。

主要分为2大类:

  • 本地仓库
  • 远程仓库
    而远程仓库又分为:中央仓库、私服、其他公共远程仓库

如果我们使用~/.m2/settings.xml,而maven安装目录中的配置不动,升级的时候只需要替换一下安装包就好了,所以我们建议将maven安装目录中的settings.xml拷贝到~/.m2中进行编辑,这个是用户级别的,只会影响当前用户.

本地仓库

当我们使用maven的时候,依赖的构件都会从远程仓库下载到本地仓库目录中.

<localRepository>本地仓库地址</localRepository>
远程仓库

当本地仓库找不到构件时,可以去远程仓库找,然后放置到本地仓库中进行使用。

中央仓库

是maven内置的一个默认的远程仓库地址,不需要用户去配置。

https://repo.maven.apache.org/maven2

中央仓库还为我们提供了一个检索构件的站点:

https://search.maven.org/

搜索
g:org.springframework.boot
或
a:spring-boot-starter-test
私服

私服有以下好处:

  • 加速maven构件的下载速度
  • 节省宽带
  • 方便部署自己的构件以供他人使用
  • 提高maven的稳定性,中央仓库需要本机能够访问外网,而如果采用私服的方式,只需要本机可以访问内网私服就可以了
其他远程仓库

中央仓库是在国外的,访问速度不是特别快,所以有很多比较大的公司做了一些好事,自己搭建了一些maven仓库服务器,公开出来给其他开发者使用,比如像阿里、网易等等。

关于构件版本问题

在发布稳定版本之前,会有很多个不稳定的测试版本,我们版本我们称为快照版本,用SNAPSHOT表示.

发布一个稳定的版本,表示这个版本是稳定的,可以直接使用,这种稳定的版本我们叫做release版本。

Maven中远程仓库的配置

在项目的 pom.xml中配置远程仓库
	 <project>
	    <repositories>
	        <repository>
	            <id>aliyun-releases</id>
	            <url>https://maven.aliyun.com/repository/public</url>
	            <releases>
	                <enabled>true</enabled>
	            </releases>
	            <snapshots>
	                <enabled>false</enabled>
	            </snapshots>
	        </repository>
	    </repositories>
	</project>

在repositories元素下,可以使用repository子元素声明一个或者多个远程仓库。

repository元素说明:

  • id:远程仓库的一个标识,中央仓库的id是central,所以添加远程仓库的时候,id不要和中央仓库的id重复,会把中央仓库的覆盖掉
  • url:远程仓库地址
  • releases:主要用来配置是否需要从这个远程仓库下载稳定版本构建
  • snapshots:主要用来配置是否需要从这个远程仓库下载快照版本构建

releases和snapshots中有个enabled属性,是个boolean值,默认为true,表示是否需要从这个远程仓库中下载稳定版本或者快照版本的构建,一般使用第三方的仓库,都是下载稳定版本的构建。

Downloading from aliyun-releases: https://maven.aliyun.com/repository/public/org/springframework/boot/spring-boot-starter-web/2.2.1.RELEASE/spring-boot-starter-web-2.2.1.RELEASE.pom

输出中有很多Downloaded from aliyun-releases,Downloaded from后面跟的aliyun-releases就是上面我们在pom.xml中配置的远程仓库repository元素中的id,后面还可以看到很多下载地址,这个地址就是我们上面在pom.xml中指定的远程仓库的地址,可以看到项目中依赖的构建从我们指定的远程仓库中下载了。

pom中配置远程仓库的方式只对当前项目起效

镜像的方式

如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像.

镜像在settings.xml中进行配置,对所有使用该配置的maven项目起效,配置方式如下

<mirror>
  <id>mirrorId</id>
  <mirrorOf>repositoryId</mirrorOf>
  <name>Human Readable Name for this Mirror.</name>
  <url>http://my.repository.com/repo/path</url>
</mirror>

mirrors元素下面可以有多个mirror元素,每个mirror元素表示一个远程镜像,元素说明:

  • id:镜像的id,是一个标识
  • name:镜像的名称,这个相当于一个描述信息,方便大家查看
  • url:镜像对应的远程仓库的地址
  • mirrorOf:指定哪些远程仓库的id使用这个镜像,这个对应pom.xml文件中repository元素的id,就是表示这个镜像是给哪些pom.xml文件中的远程仓库使用的,这里面需要列出远程仓库的id,多个之间用逗号隔开,*表示给所有远程仓库做镜像

指定多个mirrors镜像,镜像只会执行第一个位置mirror
设置多个镜像只会识别第一个镜像下载jar包。配置的多个mirror可以都放着不影响,选取一个镜像下载比较快的放在第一个就行。

配置mirrors 时
在这里插入图片描述
mirror就是镜像,主要提供一个方便地切换远程仓库地址的途径。比如,上班的时候在公司,用电信的网络,连的是电信的仓库。回到家后,是网通的网络,我想连网通的仓库,就可以通过mirror配置,统一把我工程里的仓库地址都改成联通的,而不用到具体工程配置文件里一个一个地改地址(即:<repository> 标签中的url)。

这里主要对mirrorOf再做一下说明,上面我们在项目中定义远程仓库的时候**,pom.xml文件的repository元素中有个id,这个id就是远程仓库的id,而mirrorOf就是用来配置哪些远程仓库会走这个镜像去下载构件**

mirrorOf的配置有以下几种

  • <mirrorOf>*</mirrorOf>
    匹配所有远程仓库id,这些远程仓库都会走这个镜像下载构件。
    *的意思就是(根据mirrorOf和repository的id)匹配所有的库(repository),这样就是说如果你需要某个jar,他会从镜像地址去下载这个jar。不管你配置了多少个库,即使这些库的地址不一样,仍然会从镜像地址访问
  • <mirrorOf>远程仓库1的id,远程仓库2的id</mirrorOf>
    匹配指定的仓库,这些指定的仓库会走这个镜像下载构件
  • <mirrorOf>*,! repo1</mirrorOf>
    匹配所有远程仓库,repo1除外,使用感叹号将仓库从匹配中移除
  • <mirrorOf>central</mirrorOf>
    表示当前镜像为远程中央仓库的镜像,任何对于中央仓库的请求都会转至该镜像
Downloading from mirror-aliyun-releases: https://maven.aliyun.com/repository/public/com/alibaba/fastjson/1.2.62/fastjson-1.2.62.pom

Downloaded from后面显示的是mirror-aliyun-releases,这个和settings.xml中镜像的id一致,表示我们配置的镜像起效了.

maven 仓库搜索地址

mvnrepository
maven

参考

仓库详解
mavne 官网手册
mirrors和repository的关系区别

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值