仓库与镜像

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