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