maven仓库分为本地仓库和远程仓库。当maven根据坐标寻找构件的时候,它首先会查看本地仓库,如果本地仓库存在此构件则直接使用,如果本地仓库不存在此构件或者需要查看是否有更新的构件版本,maven就会去远程仓库查找,发现需要的构件后下载到本地仓库再使用。如果本地仓库和远程仓库都没有需要的构件,maven就会报错。

本地仓库:一般来说在maven项目目录下没有诸如lib/这样用来存放依赖文件的目录。当maven在执行编译或测试时,如果需要使用依赖文件,它总是基于坐标使用本地仓库的依赖文件。默认情况下每个用户目录下都有一个路径为.m2/repository/的仓库目录,可以编辑文件~/.m2/settings.xml,设置localRepository元素的值为想要的仓库地址。如:

<settings>
 <localRepository>/xxx/yyy/</localRepository>
</settings>

一个构件只有在本地仓库中之后才能由其他maven项目使用,那么构件如何进入到本地仓库中呢?最常见的是依赖maven从远程仓库下载到本地仓库中。还有一种常见的情况是将本地项目的构件安装到maven仓库中。在某个项目中执行

mvn clean install

远程仓库:当maven无法从本地仓库找到需要的构件的时候就会从远程仓库下载构件至本地仓库。每个用户只有一个本地仓库但可以配置访问很多远程仓库。

中央仓库:由于最原始的本地仓库是空的,maven必须知道至少一个可用的远程仓库,才能在执行maven命令的时候下载到需要的构件。中央仓库就是这样一个默认的远程仓库,maven的安装文件自带了中央仓库的配置。可以找到超级POM文件在$M2_HOME/lib/maven-model-builder-3.5.2.jar中org/apache/maven/model/pom-4.0.0.xml,可以看到如下配置:

<repositories>
    <repository>
      <id>central</id>
      <name>Central Repository</name>
      <url>https://repo.maven.apache.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>

私服:是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的maven用户使用。当maven需要下载构件的时候他从私服请求如果私服不存在则从外部的远程仓库下载,缓存在私服上之后再为maven的下载请求提供服务。此外一些无法从外部仓库下载到的构件也能从本地上传到私服上供大家使用。

私服可以帮助你:

节省自己的外网带宽,加速maven构建,部署第三方构件,提高稳定性,降低中央仓库负载。