运行Maven的时候,Maven所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,Maven会检查可用的远程仓库配置,然后逐个尝试这些远程仓库去下载需要的jar文件,如果远程仓库存在该文件,Maven会将其下载到本地仓库中,继而使用。如果尝试过所有远程仓库之后,Maven还是没能够下载到该文件,它就会报错。
Maven缺省的本地仓库地址为${user.home}/.m2/repository 。 
你也可以自定义本地仓库的位置,在setting.xml中的<localRepository>
 
还可以在运行时指定本地仓库位置:
mvn clean install -Dmaven.repo.local=/home/juven/myrepo/
 
需要注意的当我们运行install的时候,Maven实际上是将项目生成的构件安装到了本地仓库,也就是localRepository目录,只有install了之后,其它项目才能使用此项目生成的构件。
如果有IDEA中有两个项目A,B其中B依赖了A,那么在B执行package之前,需要先执行A的install

 
Maven缺省的远程仓库,即Maven中央仓库:
中央仓库的id为central,远程url地址为http://repo.maven.apache.org/maven2,它关闭了snapshot版本构件下载的支持。
<repositories>
	<repository>
		<id>central</id>
		<name>Central Repository</name>
		<url>http://repo.maven.apache.org/maven2</url>
		<layout>default</layout>
		<snapshots>
			<enabled>false</enabled>
		</snapshots>
	</repository>
</repositories>
 
可以在POM中配置其它的远程仓库。能提高下载速度,也有可能你依赖的一个jar在central中找不到,它只存在于某个特定的仓库,这样你也不得不添加那个远程仓库的配置。
这里我配置一个远程仓库指向中央仓库的中国镜像:
<project> 
	<repositories>
		<repository>
			<id>maven-net-cn</id>
			<name>Maven China Mirror</name>
			<url>http://maven.net.cn/content/groups/public/</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>
	</repositories>
	<pluginRepositories>
		<pluginRepository>
			<id>maven-net-cn</id>
			<name>Maven China Mirror</name>
			<url>http://maven.net.cn/content/groups/public/</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>    
		</pluginRepository>
	</pluginRepositories>
</project>

 
<repositories> 中可以在它下面添加多个<repository> ,每个<repository>都有它唯一的ID,这个ID在镜像配置时会用到,一个描述性的name,以及远程仓库的url。
<releases><enabled>true</enabled></releases>告诉Maven可以从这个仓库下载releases版本的构件,
<snapshots><enabled>false</enabled></snapshots>告诉Maven不要从这个仓库下载snapshot版本的构件。
禁止从公共仓库下载snapshot构件是推荐的做法,因为这些构件不可能修改,也有可能删除,生产环境应该避免使用。但在开发环境可能需要经常更新,这就需要激活snapshot的支持。
 
repositories针对项目本身的依赖,就是开发过程中要用到的依赖如spring等。
pluginRepositories针对的是maven命令需要的插件依赖地址,如clean、install都是maven的插件。

在settings.xml中可以统一配置远程仓库,避免每个项目重复配置
<settings> 
	<profiles>
		<profile>
			<id>dev</id>
			<!-- 仓库配置放在这里-->
		</profile>
	</profiles>
	<activeProfiles>
		<activeProfile>dev</activeProfile>
	</activeProfiles> 
</settings>

 
这里我们定义一个id为dev的profile,将所有repositories以及pluginRepositories元素放到这个profile中,使用<activeProfiles>元素自动激活该profile。
使用profile为settings.xml添加仓库提供了一种用户全局范围的仓库配置。在IDEA的maven窗口可以看到这个ID,复选框选中表示应用这个配置。


 
 
如果需要速度更快的central镜像,或者想覆盖central仓库配置,或者想为所有POM使用唯一的一个远程仓库(这个远程仓库代理的所有必要的其它仓库), 可以使用settings.xml中的mirror配置。
以下的mirror配置用maven.net.cn覆盖了Maven自带的central:
<settings> 
	<mirrors>
		<mirror>
			<id>maven-net-cn</id>
			<name>Maven China Mirror</name>
			<url>http://maven.net.cn/content/groups/public/</url>
			<mirrorOf>central</mirrorOf>
		</mirror>
	</mirrors> 
</settings> 

<mirrorOf>central</mirrorOf>表示代理id为central的仓库,我们也可以配置一个所有仓库的镜像,以保证该镜像是Maven唯一使用的仓库:
  
mirrorOf的配置方式
*
    匹配所有远程仓库。
external:*
    匹配所有远程仓库,使用localhost的除外,使用file:// 协议的除外。也就是说,匹配所有不在本机上的远程仓库。
repo1,repo2
    匹配仓库repo1和repo2,使用逗号分隔多个远程仓库。
*,!repo1
    匹配所有远程仓库,repo1除外,使用感叹号将仓库从匹配中排除。

这里的repo1是指在pom中配置的repository.id