文章目录
- maven 项目
- Maven寻找依赖的jar
- Maven 仓库
- 本地仓库
- 远程仓库
- 中央仓库
- 私服
- 其他远程仓库
- 关于构件版本问题
- Maven中远程仓库的配置
- 在项目的 pom.xml中配置远程仓库
- 镜像的方式
- maven 仓库搜索地址
- 参考
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一致,表示我们配置的镜像起效了.