简介
maven中,每一个jar都可以称为一个构件,前面我们也提到了每个构件都有坐标来唯一标识.也是因为有了坐标,任何maven项目使用一个构件的方式就是完全相同的, 比如现在itoo用了, 导师制,体育项目, 都想要用log4j,那么就直接引用log4j的坐标就成了.引用的配置文件,直接复制粘贴过去就成了.maven可以在某个位置统一存储所有的maven项目共享的构件,统一位置就称之为仓库.
仓库布局
根据坐标可以定义在仓库中的唯一存储路径,对于一个jar的路径与坐标的大致关系为groupId/artifactId/version/artifactId-version.packaging
这个是pom文件:

   maven仓库`_maven
这个是仓库中位置:
maven仓库`_maven_02
仓库的分类
两类: 本地仓库和远程仓库,maven根据坐标寻找构建的时候,首先会查看本地仓库,若本地仓库存在此构件,则直接使用,若本地不存在,去远程仓库找.中央仓库是maven核心自带的远程仓库,私服是另一种特殊的远程仓库,为了节省带宽和时间,应该在局域网内架设一个私有的仓库服务器,用其代理所欲外部的远程仓库,内部的项目还能部署到私服上供其他项目使用.

本地仓库


一个构件只有在本地仓库中,才能由其他maven项目使用,构件如何进入到本地仓库中,最常见的是依赖maven从远程仓库下载到本地仓库,还有一种常见的情况,将本地项目的构件安装到maven仓库中. 执行命令:mvn clean install
 

远程仓库-私服

好处:1.节省自己的外网带宽;2.加速maven构建;3.部署第三方构件; 4.提交稳定性,增强控制;5.降低中央仓库的负荷
 

远程仓库的配置

如果在使用中,默认的中央仓库无法满足项目的需要,可能项目需要的构件存在于另外一个远程仓库,如JBoss Maven仓库,这时可以在pom中配置该仓库,
<profile>
			<id>central</id>
			<repositories>
				<repository>
					<id>central</id>
					<name>Central</name>
					<url>http://ip/nexus/content/groups/dynamic-public</url>
				</repository>
			</repositories>
			<pluginRepositories>
				<pluginRepository>
					<id>central</id>
					<name>Central</name>
					<url>http://ip/nexus/content/groups/dynamic-public</url>
				</pluginRepository>
			</pluginRepositories>
		</profile> 
在repositories元素下,可以使用repository子元素声明一个或者多个远程仓库,该例中声明了一个id为central,名称为Central的仓库,任何一个仓库声明的id必须是唯一的,需要注意的是:maven自带的中央仓库使用的id为central,若其他的仓库声明也使用了该id,就会覆盖中央仓库的配置


部署至远程仓库

mvn clean deploy 将项目构建输出的构件部署到配置对应的远程仓库.
 
镜像                         
  如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像.换句话说,任何一个可以从仓库Y获得的构件,都能够从它的镜像中获取.itoo中应用的就是就结合私服.由于私服可以代理任何外部的公共仓库,因此,对于组织内部的maven用户来说,使用一个私服地址就等于使用了所有需要的外部仓库.私服就是所有仓库的镜像.         
   
<mirrors>
		<mirror>
			<id>nexus</id>
			<mirrorOf>central</mirrorOf>
			<name>nexus repository</name>
			<url>http://私服地址/nexus/content/groups/dynamic-public</url>
		</mirror>
	</mirrors>
mirrorOf: 匹配仓库central,简单罗列几个常用的
<mirrorOf>*</mirrorOf>:匹配所有远程仓库
<mirrorOf>external:*</mirrorOf>:匹配所有远程仓库,使用localhost的除外,使用file://协议的除外.也就是说,匹配所有不在本机上的远程仓库.
<mirrorOf>repo1,repo2</mirrorOf>:匹配仓库repo1和repo2,使用逗号分隔多个远程仓库了.
<mirrorOf>*,!repo1</mirrorOf>匹配所有远程仓库,repo1除外,使用感叹号将仓库从匹配中排除.
由于镜像仓库完全屏蔽了被镜像仓库,当镜像仓库不稳定或者停止服务的时候,maven仍将无法访问被镜像仓库,因而无法下载构件.