原文网址:maven--镜像/仓库--使用--改为国内地址等_IT利刃出鞘的博客-CSDN博客
简介
本文介绍maven镜像和仓库的用法。包括:仓库搜索的优先级、如何设置为国内的仓库地址等。
依赖搜索顺序
maven项目使用的仓库的方式
- *仓库。 这是默认的仓库。对应url为:http://repo1.maven.org/maven2/
- 镜像仓库。 通过 sttings.xml 中的 settings.mirrors.mirror 配置
- 全局profile仓库。 通过 settings.xml 中的 settings.repositories.repository 配置
- 项目仓库。 通过 pom.xml 中的 project.repositories.repository 配置
- 项目profile仓库。 通过 pom.xml 中的 project.profiles.profile.repositories.repository 配置
- 本地仓库
搜索顺序
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)
- 可以看出,默认是从 central *仓库拉取的jar.
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)
- 可以看出,是从 settings_mirror 中下载的jar
- 结论:settings_mirror 的优先级高于 central
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>
- 由于我们改变了id的名字,所以仓库地址无所谓,使用相同的地址也不影响测试。
执行测试:
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可以看出:
- jar 是从 pom_repositories 中下载的。
- pom_repositories 优先级高于 settings_mirror
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可以看出:
- jar 是从 settings_profile_repo 中下载的。
- settings_profile_repo 优先级高于 settings_mirror。
- settings_profile_repo 优先级高于 pom_repositories 。
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可以看出:
- jar 是从 settings_profile_repo 中下载的
- settings_profile_repo 优先级高于 pom_profile_repo
进一步测试:
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可以看出:
- jar 是从 settings_profile_repo 中下载的
- pom_profile_repo 优先级高于 pom_repositories
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解压目录)
本地库查找顺序(依次按照以下顺序查找)
- %USER_HOME%/.m2/settings.xml中指定的路径
- %M2_HOME%/conf/settings.xml中指定的路径
- %USER_HOME%/.m2/repository
远程仓库
修改远程仓库方法: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种
- *仓库(central repository):http://repo1.maven.org/maven2/
- 私服(internal repository):内网自建的maven repository,其URL是一个内部网址
- 其他公共仓库:其他可以互联网公共访问maven repository,例如 jboss repository等。
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