按照我认为的顺序来一一讲解。apache
1、maven依赖仓库缓存
maven的依赖仓库,是用来存放依赖包的。一共有两种依赖仓库:本地仓库和远程仓库。远程仓库又分为:中央仓库(mvn官方)、私服和其余公共仓库。maven
1. 本地仓库.net
本地仓库是存放在用户本地计算节点的,即笔记本或者台式机上。本地仓库默认路径是:~/.m2/repository,能够修改(但不推荐,麻烦)。虽然它是一个文件夹,可是它是由maven管理的,若是经过复制粘贴将依赖包放到本地仓库中,没有意义,maven在编译时候不会发现这个依赖包。所以,若是须要手动向本地仓库中添加依赖包,须要使用maven install 命令。代理
本地仓库也会主动添加依赖包。由于编译的时候,maven首先查看的是本地仓库,再查看远程仓库或者项目中的指明的repo文件夹。所以,当maven发现本地仓库中没有给依赖包,在编译后,会主动添加该依赖包。xml
本地仓库在安装完maven时是没建立,须要第一次启动maven命令后才建立,而后一直存在。blog
2. 远程仓库源码
2.1 中央仓库it
中央仓库是默认的远程仓库,maven自带的就是中央仓库的配置(http://repo.maven.apache.org/maven2)。中央仓库包含了绝大多数流行的开源Java构件,以及它的源码、做者信息、pom依赖复制等。通常来讲,不少依赖包均可以在这里下载。io
2.2 私服
私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的Maven用户使用。当Maven须要下载构件的时候,它从私服请求,若是私服上不存在该构件,则从外部的远程仓库下载,缓存在私服上以后,再为Maven的下载请求提供服务。咱们还能够把一些没法从外部仓库下载到的构件上传到私服上。
2.3 其余公共仓库
2、依赖包坐标
每一个依赖包都有惟一的坐标,Maven根据这个坐标定义了依赖包在本地仓库或者远程仓库中的惟一存储路径。
坐标由:groupid,artifactid和version肯定。如: com/intel/gkl/gkl/0.5.2/gkl-0.5.2.jar,其中,groupid是com.intel.gkl, artifactid是gkl,version是0.5.2,依赖包的名称是gkl-0.5.2.jar.
3、依赖包查找过程
1. 当依赖范围是system的时候,Maven直接从本地文件系统查找依赖包(后续会说明怎么回事)。
2. 根据依赖坐标计算仓库路径后,尝试直接从本地仓库寻找,若是发现则成功。
3. 在本地仓库不存在相应的依赖包状况下,若是项目有建立了repo文件夹而且在pom.xml中指出,那么,在项目的repo文件夹中查找,若是发现则成功。
4. 在本地仓库不存在相应的依赖包状况下,则遍历全部的远程仓库,发现后下载使用(这里有关于RELEASE或LATEST或者SNAPSHOT的状况,这里再也不说明)。
注明:对于3和4的顺序,不是很清楚。可是,若是没有在本地仓库中找到的在3和4中找到的依赖包,都会被复制到本地仓库中。
部份内容摘自 http://blog.csdn.net/wanghantong/article/details/36427433