仓库与镜像
1.仓库分类
maven 的仓库分为本地仓库和远程仓库。
2.本地仓库
本地仓库就是储存在你自己电脑上的仓库
3.远程仓库
远程仓库虽然maven提供了一个拥有jar包比较全的, 但是由于它的下载速度比较慢,而且它那里的jar包也不是100%都全.所以市面上就有人建立了如aliyun等各种各样的远程仓库.
4.镜像仓库
maven官方仓库的地址在国外,访问比较慢,因此阿里巴巴就把maven官方仓库的jar包全部下载下来,放到自己国内的aliyun仓库,全部复制粘贴,一模一样,就跟镜像一样,所以也叫镜像仓库.
5.为什么要配置多个仓库
我们都知道,maven 的仓库分为本地仓库和远程仓库。默认的远程仓库叫做中央仓库,地址为:https://repo.maven.apache.org/maven2/
,它的下载速度比较慢,不做任何配置时,下载一个 dubbo 的 jar 包,就是从中央仓库下载的.
这个时候我们就可以为项目配置多个仓库地址,下载时会由上到下依次尝试,哪个仓库成功了,就停止尝试,因此可以把速度快的仓库配置在靠上位置
注意:其实配多个仓库的更主要原因是,某些 jar 包只在 A 仓库有,在 B 仓库没有,这时就得配置多个仓库了
6.在pom文件里用<repositories>标签配置仓库.(很少用)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
... <repositories>
<repository>
<id>aliyun</id>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</repository>
<repository>
<id>central</id>
<url>https://repo.maven.apache.org/maven2/</url>
</repository>
</repositories>
...
</project>
上面这种把仓库地址写在pom文件的做法很少用.
7.<mirror>和<repositories>的区别
- 首先<mirror>它是配置在 settings.xml 中,
<repository>
一般配置在 pom.xml 中,位置不同 - 其次 <mirror>的目的很单纯:就是为了加速,用镜像地址覆盖掉原始仓库的地址
用法示例:接下来配置镜像的 <mirrorOf>
为 central,在 settings.xml 中
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> ...
<mirrors>
<mirror>
<id>aliyun</id>
<mirrorOf>central</mirrorOf>
<name>aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors> ...
</settings>
就会覆盖掉 pom.xml 中真正的 <id>
为 central 的仓库,取而代之,即使配置了 id 为 central 的仓库,实际也会走 mirror 的下载
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
... <repositories>
<repository>
<id>central</id>
<url>https://repo.maven.apache.org/maven2/</url>
</repository>
</repositories>
...
</project>
注意:
- 最好重启 idea 让 mirror 生效
- 如果镜像的
<mirrorOf>
为*
号,则所有仓库的下载都会走 mirror