mirror 是做什么的?
repository是做什么的?
2者有什么联系和区别呢?
简单点来说,repository就是个仓库。maven里有两种仓库,本地仓库和远程仓库。远程仓库相当于公共的仓库,大家都能看到。本地仓库是你本地的一个山寨版,只有你看的到,主要起缓存作用。当你向仓库请求插件或依赖的时候,会先检查本地仓库里是否有。如果有则直接返回,否则会向远程仓库请求,并做缓存。你也可以把你做的东西上传到本地仓库给你本地自己用,或上传到远程仓库,供大家使用。
远程仓库可以在工程的pom.xml文件里指定,楼上两位已经列的很清楚了。如果没指定,默认就会把下面这地方做远程仓库,即默认会到http://repo1.maven.org/maven2这个地方去请求插件和依赖包。
[code="xml"]
false
central
Maven Repository Switchboard
http://repo1.maven.org/maven2
[/code]
本地仓库默认在你本地的用户目录下的.m2/repository目录下。
mirror就是镜像,主要提供一个方便地切换远程仓库地址的途径。比如,上班的时候在公司,用电信的网络,连的是电信的仓库。回到家后,是网通的网络,我想连网通的仓库,就可以通过mirror配置,统一把我工程里的仓库地址都改成联通的,而不用到具体工程配置文件里一个一个地改地址。
mirror的配置在.m2/settings.xml里。如:
[code="xml"]
UK
UK Central
http://uk.maven.org/maven2
central
[/code]
这样的话,就会给上面id为central的远程仓库做了个镜像。以后向central这个仓库发的请求都会发到http://uk.maven.org/maven2而不是http://repo1.maven.org/maven2了。
central里是要替代的仓库的id。如果填*,就会替代所有仓库。
参考资料:
http://maven.apache.org/guides/introduction/introduction-to-repositories.html
http://maven.apache.org/guides/mini/guide-mirror-settings.html
Mirror是制定镜像站点,例如:
[code="java"]
planetmirror.com
PlanetMirror Australia
http://downloads.planetmirror.com/pub/maven2
central
[/code]
id, name是该镜像的唯一定义符。id用来区分不同的mirror元素。
url是该镜像的URL。构建系统会优先考虑使用该URL,而非使用默认的服务器URL。
mirrorOf是被镜像的服务器的id。例如,如果我们要设置了一个Maven中央仓库(http://
repo1.maven.org/maven2)的镜像,就需要将该元素设置成central。这必须和
中央仓库的id central完全一致。
Repository是是Maven用来填充构建系统本地仓库所使用的一组远程项目。而Maven是从本地仓库
中使用其插件和依赖。不同的远程仓库可能含有不同的项目,而在某个激活的profile
下,可能定义了一些仓库来搜索需要的发布版或快照版构件。
你可以在你的maven目录下conf/settings.xml加入:
[code="java"]
offical
Maven Official Repository
http://repo1.maven.org/maven2
central
jboss
Jboss Repository
http://repository.jboss.org/nexus/content/groups/public-jboss/
central
[/code]
然后在你的maven项目中的pom.xml加入:
[code="java"]
offical
Maven Official Repository
http://repo1.maven.org/maven2
false
jboss
Jboss Repository
http://repository.jboss.org/nexus/content/groups/public-jboss/
false
[/code]
建议你最好在自己的服务器下安装Nexus,创建私服代理Maven仓库。