maven仓库repositories和mirrors的配置及区别详解

 更新时间:2020年07月12日 16:30:12   作者:jerry741  
这篇文章主要介绍了maven仓库repositories和mirrors的配置及区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

maven仓库配置

仓库优先级为:本地仓库(localRepositories) > profile中的repositories仓库 > POM > mirrors全局仓库

通过mirror配置

如果仓库X可以提供仓库Y所有的内容,那么我们就可以认为X是Y的一个镜像,通俗点说,可以从Y获取的构件都可以从他的镜像中进行获取。可以采用镜像的方式配置远程仓库,镜像在settings.xml中进行配置,在setting.xml中的<mirrors>标签下加入如下子标签配置便配置了一个maven镜像。

<mirror>
  <id>alimaven</id>
  <name>aliyun maven</name>
  <!--mirrorOf的配置很重要后面会详细说明-->
  <mirrorOf>central</mirrorOf>
  <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>

添加如上配置后,maven会读取setting.xml中配置的mirror作为jar包的下载地址,我们以在项目中下载fastjson为例来看一下效果。

可以看到,配置了上面的mirror后,maven是从aliyun仓库下载的jar包,不配置的时候,默认从apache的maven中央仓库下载的jar包。

上面提到,<mirrorOf></mirrorOf>的设置很重要,比如上面我设置的mirrorOf为<mirrorOf>central</mirrorOf>,如果<mirrorOf></mirrorOf>我随便设置一个参数,如<mirrorOf>abc</mirrorOf>,这时候我们配置的仓库就不起作用了,这是因为maven默认内置了如下一个仓库,这个默认仓库的id为central,当我们把mirrorOf设置为<mirrorOf>central</mirrorOf>时,maven就会查找有没有id为central的仓库,然后把id为central的仓库地址换成我们<mirror>标签配置的那个url,这样我们配置的mirror才会起作用。当然我们也可以把mirrorOf设置为<mirrorOf>*</mirrorOf>,表示所有仓库都使用我们配置的这个mirror作为jar包下载地址。

<repositories>
  <repository>
   <id>central</id>
   <name>Central Repository</name>
   <url>https://repo.maven.apache.org/maven2</url>
   <layout>default</layout>
   <snapshots>
    <enabled>false</enabled>
   </snapshots>
  </repository>
</repositories>

通过<repositories>配置

通过setting.xml方式配置会对所有maven项目生效,如果只想在本项目中配置一个maven仓库,可以通过在pom.xml中配置<repositories>标签来实现。在自己的maven项目的pom.xml中添加如下配置,就配置好了一个仓库。这时候,maven会优先采用这个配置,而不会去读setting.xml中的配置了。这样配置好后,maven就会自动从aliyun下载jar包了。

 <repositories>
  <repository>
    <id>aliyun-releases</id>
    <name>阿里云仓库(name可以随便起)</name>
    <url>https://maven.aliyun.com/repository/public</url>
  </repository>
</repositories>

我们知道,repositories标签下可以配置多个repository,如果我们配置了多个repository,maven会用哪个呢,答案是按出现顺序使用,如果第1个可用,就用第一个,如果不可用,就依次往下找,下面的2张图片可以说明这个问题。

上面配置<repository>时<id>似乎也没什么用,确实是,如果你只是在pom.xml中配置个仓库,这个id是没什么用的,可以随便写,其实这个id是配合上面讲的mirror一块使用的,还记得mirrorOf吗,我们配置mirrorOf为<mirrorOf>central</mirrorOf>是,mirror中的url就是central仓库的url给覆盖了,所以这里的<repository>标签下的id是给mirrorOf用的。

可以看下面一个例子,本来我们的abc-releases这个仓库是不可用的,因为根本就没有https://abc.def.com/repository/public/这个仓库,但是我们通过mirror配置,改变了id为abc-releases这个仓库的url,从而使用maven也可以从id为abc-releases这个仓库下载jar包了。当然这样配置也没只啥意义,只是为了方便理解repository和mirror之间的关系。

maven仓库配置的其他选项

<!--releases和snapshots中有个enabled属性,是个boolean值,默认为true,
表示是否需要从这个远程仓库中下载稳定版本或者快照版本的构建,
一般使用第三方的仓库,都是下载稳定版本的构建。-->
<repository>
  <id>aliyun-releases</id>
  <url>https://maven.aliyun.com/repository/public</url>
  <releases>
    <enabled>true</enabled>
  </releases>
  <snapshots>
    <enabled>false</enabled>
  </snapshots>
</repository>

maven默认的内置仓库的配置位置

<!--
可以从以下文件中找到maven仓库的默认配置如下
apache-maven-3.6.1\lib\maven-model-builder-3.6.1.jar\org\apache\maven\model\pom-4.0.0.xml
-->
<repositories>
  <repository>
   <id>central</id>
   <name>Central Repository</name>
   <url>https://repo.maven.apache.org/maven2</url>
   <layout>default</layout>
   <snapshots>
    <enabled>false</enabled>
   </snapshots>
  </repository>
</repositories>

到此这篇关于maven仓库repositories和mirrors的配置及区别详解的文章就介绍到这了,更多相关maven仓库repositories和mirrors配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 深度deepin安装以及jdk、tomcat、Nginx安装教程

    深度deepin安装以及jdk、tomcat、Nginx安装教程

    这篇文章主要给大家介绍了关于深度deepin安装以及jdk、tomcat、Nginx安装的相关资料,按照文中介绍的方法可以轻松的实现安装,对大家的工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-01-01
  • Java8函数式接口Predicate用法示例详解

    Java8函数式接口Predicate用法示例详解

    这篇文章主要为大家介绍了Java8函数式接口Predicate用法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • SpringBoot配置连接两个或多个数据库的常用方法

    SpringBoot配置连接两个或多个数据库的常用方法

    在Spring Boot应用中连接多个数据库或数据源可以使用多种方式,本文讲给大家介绍两种常用的方法:使用Spring Boot官方支持的多数据源配置和使用第三方库实现多数据源,文章通过代码介绍的非常详细,需要的朋友可以参考下
    2023-08-08
  • Spring Boot启动过程(六)之内嵌Tomcat中StandardHost、StandardContext和StandardWrapper的启动教程详解

    Spring Boot启动过程(六)之内嵌Tomcat中StandardHost、StandardContext和Sta

    这篇文章主要介绍了Spring Boot启动过程(六)之内嵌Tomcat中StandardHost、StandardContext和StandardWrapper的启动教程详解,需要的朋友可以参考下
    2017-04-04
  • Java中解密微信加密数据工具类

    Java中解密微信加密数据工具类

    最近小编一直在开发微信公众号、小程序项目,微信返回给我们的数据都是加密的,我们需要使用sessionkey配合解密,才能看到我们想要的数据,基于代码怎么实现呢,下面小编给大家带来了Java中解密微信加密数据工具类的完整代码,一起看看吧
    2021-06-06
  • Spring中@Async注解实现异步调详解

    Spring中@Async注解实现异步调详解

    在本篇文章里小编给大家分享的是关于Spring中@Async注解实现异步调详解内容,需要的朋友们可以学习下。
    2020-04-04
  • java中的char占几个字节实例分析

    java中的char占几个字节实例分析

    这篇文章主要介绍了java中的char占几个字节实例分析的相关资料,需要的朋友可以参考下
    2017-04-04
  • 详细介绍Java阿里云的短信验证码实现

    详细介绍Java阿里云的短信验证码实现

    这篇文章主要介绍了详细介绍Java阿里云的短信验证码实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • Spring实现加法计算器和用户登录功能

    Spring实现加法计算器和用户登录功能

    在前后端分离的Web开发模式中,接口(API)扮演着至关重要的角色,它是前后端交互的桥梁,创建加法计算器和用户登录功能时,介绍了接口测试和问题解决的一般流程,如使用Postman测试接口、查看日志、处理缓存问题等,确保开发过程中的高效协作和问题快速定位
    2024-10-10
  • jdk1.8的环境配置过程

    jdk1.8的环境配置过程

    Java平台由Java虚拟机和Java应用程序接口搭建,Java语言则是进入这个平台的通道,用Java语言编写并编译的程序可以运行在这个平台上,本文给大家讲解jdk1.8的环境配置过程,感兴趣的朋友跟随小编一起看看吧
    2022-11-11

最新评论