原文网址:maven--镜像/仓库--使用--改为国内地址等_IT利刃出鞘的博客-CSDN博客
本文介绍maven镜像和仓库的用法。包括:仓库搜索的优先级、如何设置为国内的仓库地址等。
maven项目使用的仓库的方式
搜索顺序
local_repo > settings_profile_repo > pom_profile_repo > pom_repositories > settings_mirror > central
验证过程
1.准备测试环境
安装jdk、maven。
使用如下命令创建测试项目:
yes | mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=true -DgroupId=com.pollyduan -DartifactId=myweb -Dversion=1.0 -Dpackage=com.pollyduan
创建完成后,为了避免后续测试干扰,先执行一次compile。
cd myweb mvn compile
最后,修改 pom.xml 文件,将 junit版本号改为 4.12 。我们要使用这个jar来测试依赖的搜索顺序。
2.默认情况
首先确保junit4.12不存在:
rm -rf ~/.m2/repository/junit/junit/4.12
默认情况下没有配置任何仓库,也就是说,既没改 $M2_HOME/conf/settings.xml 也没有添加 ~/.m2/settings.xml
执行编译,查看日志中拉取junit的仓库。
mvn compile ... Downloaded from central: https://repo.maven.apache.org/maven2/junit/junit/4.12/junit-4.12.pom (24 kB at 11 kB/s)
3.配置镜像仓库 settings_mirror
创建 ~/.m2/setttings.xml ,内容如下:
<settings> <mirrors> <mirror> <id>settings_mirror</id> <url>https://maven.aliyun.com/repository/public</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors> </settings>
重新测试:
rm -rf ~/.m2/repository/junit/junit/4.12 mvn compile
在日志中查看下载依赖的仓库:
Downloaded from settings_mirror: https://maven.aliyun.com/repository/public/junit/junit/4.12/junit-4.12.pom (24 kB at 35 kB/s)
4. 配置pom中的仓库 pom_repositories
在 project 中增加如下配置:
<repositories> <repository> <id>pom_repositories</id> <name>local</name> <url>http://10.18.29.128/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories>
执行测试:
rm -rf ~/.m2/repository/junit/junit/4.12 mvn compile
在日志中查看下载依赖的仓库:
Downloaded from pom_repositories: http://10.18.29.128/nexus/content/groups/public/junit/junit/4.12/junit-4.12.pom (24 kB at 95 kB/s)
从显示的仓库id可以看出:
5. 配置全局profile仓库 settings_profile_repo
在 ~/.m2/settings.xml 中 settings 的节点内增加:
<profiles> <profile> <id>s_profile</id> <repositories> <repository> <id>settings_profile_repo</id> <name>netease</name> <url>http://mirrors.163.com/maven/repository/maven-public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> </profile> </profiles>
执行测试:
rm -rf ~/.m2/repository/junit/junit/4.12 mvn compile -Ps_profile
在日志中查看下载依赖的仓库:
Downloaded from settings_profile_repo: http://mirrors.163.com/maven/repository/maven-public/junit/junit/4.12/junit-4.12.pom (24 kB at 63 kB/s)
从显示的仓库id可以看出:
6. 配置项目profile仓库 pom_profile_repo
<profiles> <profile> <id>p_profile</id> <repositories> <repository> <id>pom_profile_repo</id> <name>local</name> <url>http://10.18.29.128/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> </profile> </profiles>
执行测试:
rm -rf ~/.m2/repository/junit/junit/4.12 mvn compile -Ps_profile,p_profile mvn compile -Pp_profile,s_profile
在日志中查看下载依赖的仓库:
Downloaded from settings_profile_repo: http://mirrors.163.com/maven/repository/maven-public/junit/junit/4.12/junit-4.12.pom (24 kB at 68 kB/s)
从显示的仓库id可以看出:
进一步测试:
rm -rf ~/.m2/repository/junit/junit/4.12 mvn compile -Pp_profile
在日志中查看下载依赖的仓库:
Downloaded from pom_profile_repo: http://10.18.29.128/nexus/content/groups/public/junit/junit/4.12/junit-4.12.pom (24 kB at 106 kB/s)
从显示的仓库id可以看出:
7. 最后确认 local_repo 本地仓库 ~/.m2/repository
这不算测试了,只是一个结论,可以任意测试。
~/.m2/repository
中包含依赖,无论怎么配置,都会优先使用local本地仓库中的jar.修改镜像方法
配置文件:conf/settings.xml (maven解压目录)
<settings> ... <mirrors> <mirror> <id>nexus-aliyun</id> <!-- <mirrorOf>central</mirrorOf> --> <mirrorOf>*</mirrorOf> <name>阿里云公共仓库</name> <url>https://maven.aliyun.com/repository/public</url> </mirror> </mirrors> ... </settings>
概述
如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像。换句话说,任何一个可以从仓库Y获得的构件,都能够从它的镜像中获取。举个例子,http://maven.net.cn/content/groups/public/ 是中央仓库http://repo1.maven.org/maven2/ 在中国的镜像,由于地理位置的因素,该镜像往往能够提供比中央仓库更快的服务。
镜像的拦截作用
mirror相当于一个拦截器,它会通过<mirrorOf> xxx </mirrorOf>,把符合xxx条件的remote repository的请求重定向到mirror里配置的地址。
mirrorOf用法:
配置 | 说明 |
<mirrorOf>*</mirrorOf> | 匹配所有远程仓库。 |
<mirrorOf>central,repo2</mirrorOf> | 匹配仓库central和repo2,使用逗号分隔多个远程仓库。 |
<mirrorOf>external:*</mirrorOf> | 匹配所有不在本机上的远程仓库。(使用localhost的除外,使用file://协议的除外。) |
<mirrorOf>*,!repo1</miiroOf> | 匹配所有远程仓库,repo1除外,使用感叹号将仓库从匹配中排除。 |
mirror就是镜像,主要提供一个方便地切换远程仓库地址的途径。比如,上班的时候在公司,用电信的网络,连的是电信的仓库。回到家后,是网通的网络,连网通的仓库,就可以通过mirror配置,统一把我工程里的仓库地址都改成联通的,而不用到具体工程配置文件里一个一个地改地址。
可以配置Maven使用该镜像来替代中央仓库。编辑conf/settings.xml,代码如下:
<settings> ... <mirrors> <mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>阿里云公共仓库</name> <url>https://maven.aliyun.com/repository/public</url> </mirror> </mirrors> ... </settings>
该例中,<mirrorOf>的值为central,表示该配置为中央仓库的镜像。这样配置之后,以后向central这个仓库发的请求都会发到http://maven.aliyun.com/nexus/content/groups/public而不是默认的http://repo1.maven.org/maven2/。
其他网址
Maven镜像地址大全,Maven镜像地址配置示例_Spring Boot-Common On With You-CSDN博客_maven镜像地址
1、阿里的镜像地址
另见:仓库服务
<mirror> <id>nexus-aliyun</id> <!-- <mirrorOf>central</mirrorOf> --> <mirrorOf>*</mirrorOf> <name>阿里云公共仓库</name> <url>https://maven.aliyun.com/repository/public</url> </mirror>
2、华为的镜像地址
<mirror> <id>huaweicloud</id> <name>mirror from maven huaweicloud</name> <url>https://mirror.huaweicloud.com/repository/maven/</url> <mirrorOf>central</mirrorOf> </mirror>
使用华为Maven中央仓库时,需要在servers节点增加一个server子节点,内容如下:
<server> <id>huaweicloud</id> <username>anonymous</username> <password>devcloud</password> </server>
经过实际的生产使用后,貌似阿里的要比华为的要快些!
3、ibiblio 镜像地址(这个也比较快的呃)
<mirror> <id>ibiblio</id> <name>Mirror from Maven ibiblio</name> <url>http://mirrors.ibiblio.org/pub/mirrors/maven2/</url> <mirrorOf>central</mirrorOf> </mirror>
4、repo1.maven.org 镜像地址
<mirror> <id>central</id> <name>Maven Repository Switchboard</name> <url>http://repo1.maven.org/maven2/</url> <mirrorOf>central</mirrorOf> </mirror>
5、repo1.maven.apache.org 镜像地址
<mirror> <id>central</id> <name>Maven Repository Switchboard</name> <url>http://repo1.maven.apache.org/maven2/</url> <mirrorOf>central</mirrorOf> </mirror>
6、repo2 镜像地址
<mirror> <id>repo2</id> <name>Mirror from Maven Repo2</name> <url>http://repo2.maven.org/maven2/</url> <mirrorOf>central</mirrorOf> </mirror>
7、spring.io 镜像地址
<mirror> <id>sprintio</id> <mirrorOf>central</mirrorOf> <name>Human Readable Name for this Mirror.</name> <url>https://repo.spring.io/libs-snapshot/</url> </mirror>
8、UK 镜像地址
<mirror> <id>ui</id> <name>Mirror from UK</name> <url>http://uk.maven.org/maven2/</url> <mirrorOf>central</mirrorOf> </mirror>
9、JBoss 镜像地址
<mirror> <id>jboss-public-repository-group</id> <name>JBoss Public Repository Group</name> <url>http://repository.jboss.org/nexus/content/groups/public</url> <mirrorOf>central</mirrorOf> </mirror>
10、Google 镜像地址
<mirror> <id>google</id> <name>google maven</name> <url>https://maven.google.com/</url> <mirrorOf>central</mirrorOf> </mirror>
11、Maven china镜像地址
<mirror> <id>maven.net.cn</id> <name>Mirror from Maven in china</name> <url>http://maven.net.cn/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>
12、Maven oschina镜像地址
<mirror> <id>CN</id> <name>OSChinaCentral</name> <url>http://maven.oschina.net/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>
maven里有两种仓库,Local Repository(本地仓库)和Remote Repository(远程仓库)。
本地仓库
默认放到此路径:C:\User\xxx\.m2\repository。此仓库随着使用会比较大,几个G
修改本地仓库路径的方法
配置文件:conf/settings.xml (maven解压目录)
本地库查找顺序(依次按照以下顺序查找)
远程仓库
修改远程仓库方法:pom.xml
<project ...> <repositories> <repository> <id>alimaven</id> <name>aliyun maven</name> <url>https://maven.aliyun.com/repository/public/</url> </repository> </repositories> </project>
Remote Repository(远程仓库)主要有3种
internal repository和mirror
internal repository和mirror是两码事。前者本身是一个repository,可以和其它repository一起提供服务,比如它可以用来提供公司内部的maven构件;而后者本身并不是repository,它只是远程repository的网络加速器。 很多internal repository搭建工具往往也提供mirror服务,比如Nexus就可以让同一个URL,既用作internal repository,又使它成为所有repository的mirror。
其他网址
Maven中央仓库地址大全,Maven中央仓库配置示例_Spring Boot-Common On With You-CSDN博客
1、阿里中央仓库(首推1)
<repository> <id>alimaven</id> <name>aliyun maven</name> <url>https://maven.aliyun.com/repository/public/</url> </repository>
2、camunda.com 中央仓库(首推2)
<repository> <id>activiti-repos2</id> <name>Activiti Repository 2</name> <url>https://app.camunda.com/nexus/content/groups/public</url> </repository>
3、alfresco.com 中央仓库(首推3)
<repository> <id>activiti-repos</id> <name>Activiti Repository</name> <url>https://maven.alfresco.com/nexus/content/groups/public</url> </repository>
4、maven.apache.org 中央仓库
<repository> <id>central-repos</id> <name>Central Repository</name> <url>http://repo.maven.apache.org/maven2</url> </repository>
5、maven.org 中央仓库
<repository> <id>central-repos1</id> <name>Central Repository 2</name> <url>http://repo1.maven.org/maven2/</url> </repository>
6、spring.io 中央仓库
<repository> <id>springsource-repos</id> <name>SpringSource Repository</name> <url>http://repo.spring.io/release/</url> </repository>
Maven 项目中依赖的搜索顺序 - polly的个人空间 - OSCHINA