1.没有配置私服的情况下(大部分情况下)
如上图所示,maven是依次从本地仓库、中央仓库和第三方仓库获取依赖的,其实在maven中并不是以这三种类型区分的,在maven中只有两种仓库类型,本地仓库和远程仓库,我图中的中央仓库和第三方仓库都属于远程仓库,这里只是细化了。
- 首先当构建项目时,如果缺少依赖项,maven会从配置的本地仓库中寻找该依赖
- 当本地仓库不存在时,maven会去中央仓库寻找该依赖,一般地,我们国内用户都会在安装maven时在setting.xml中添加中央仓库的镜像以加快速度,所以如果你对中央仓库配置了aliyun的镜像地址,那么到这一步时maven会去镜像地址查找该依赖
- 如果你的项目中有些依赖在中央仓库不存在,那么就代表中央仓库也无法找到,这时maven会去通过pom.xml文件中定义的远程仓库依次访问查找依赖,直到遇到第一个查找到的依赖即停止查找并下载依赖到本地仓库
- 如果遍历完远程仓库仍然未找到,maven则报错
tips:我不建议在配置aliyun镜像的时候设置通配符去代替所有远程仓库,就像这样
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>*</mirrorOf>
</mirror>
这样写就代表该配置是所有maven仓库的镜像,任何对于远程仓库的请求都会被转到该地址,但是aliyun只是中央仓库的镜像,所以如果你这样写就会导致依赖永远拉取不下来(如果该依赖是中央仓库没有的),还是建议规范一些,mirrorOf设置为central
2.配置私服的情况下
- 首先当构建项目时,如果缺少依赖项,maven会从配置的本地仓库中寻找该依赖
- 如果本地仓库不存在需要的依赖,maven会去配置的私服中查找依赖并下载到本地仓库
- 如果私服也没有找到,私服会向它配置的其他远程仓库发送请求,例如中央仓库或其他远程仓库等,如果找到依赖则缓存到私服中并提供该依赖
- 最终,如果所需的构件在私服上配置的任何远程仓库中都无法找到,则Maven将报告构建失败。
tips:这里所说的私服也是一种特殊的远程仓库,也就是说,对于maven来说,除了本地仓库,其他的仓库都属于远程仓库