ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

maven--镜像/仓库--使用--改为国内地址等

2021-10-18 23:30:18  阅读:441  来源: 互联网

标签:profile repository settings -- maven 仓库 镜像 junit


原文网址:maven--镜像/仓库--使用--改为国内地址等_IT利刃出鞘的博客-CSDN博客

简介

        本文介绍maven镜像和仓库的用法。包括:仓库搜索的优先级、如何设置为国内的仓库地址等。

依赖搜索顺序

maven项目使用的仓库的方式

  1. 中央仓库。            这是默认的仓库。对应url为:http://repo1.maven.org/maven2/
  2. 镜像仓库。            通过 sttings.xml 中的 settings.mirrors.mirror 配置
  3. 全局profile仓库。  通过 settings.xml 中的 settings.repositories.repository 配置
  4. 项目仓库。            通过 pom.xml 中的 project.repositories.repository 配置
  5. 项目profile仓库。  通过 pom.xml 中的 project.profiles.profile.repositories.repository 配置
  6. 本地仓库

搜索顺序

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解压目录)

本地库查找顺序(依次按照以下顺序查找)

  1. %USER_HOME%/.m2/settings.xml中指定的路径
  2. %M2_HOME%/conf/settings.xml中指定的路径
  3. %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

标签:profile,repository,settings,--,maven,仓库,镜像,junit
来源: https://blog.csdn.net/feiying0canglang/article/details/108054850

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有