详解maven的setting配置文件中mirror和repository的区别

当maven需要到的依赖jar包不在本地仓库时, 就需要到远程仓库下载 .

这个时候如果mavensetting.xml中配置了镜像 , 而且镜像配置的规则中匹配到目标仓库时 ,

maven认为目标仓库被镜像了, 不会再去被镜像仓库下载依赖jar包, 而是直接去镜像仓库下载.

简单而言, mirror可以拦截对远程仓库的请求 , 改变对目标仓库的下载地址

repository

repository就是个仓库.

maven里有两种仓库,本地仓库和远程仓库。

远程仓库相当于公共的仓库,大家都能看到。

本地仓库是你本地的缓存副本,只有你看的到,主要起缓存作用。

当你向仓库请求插件或依赖的时候,会先检查本地仓库里是否有。

如果有则直接返回,否则会向远程仓库请求,并被缓存到本地仓库。

远程仓库可以在工程的pom.xml文件里指定。

如果没指定,默认会到http://repo1.maven.org/maven2这个地方去请求插件和依赖包。

*<repository> *

*  <snapshots> *

*  <enabled>false</enabled> *

*  </snapshots> *

*  <id>central</id> *

*  <name>Maven Repository Switchboard</name> *

*  <url>**[http://repo1.maven.org/maven2</url>*

* </repository> *

本地仓库默认在你本地的用户目录下的.m2/repository目录下。

mirror

mirror就是镜像,主要提供一个方便地切换远程仓库地址的途径。

比如,上班的时候在公司,用电信的网络,连的是电信的仓库。

回到家后,是网通的网络,我想连网通的仓库,就可以通过mirror配置,统一把我工程里的仓库地址都改成联通的,而不用到具体工程配置文件里一个一个地改地址。

mirror的配置在.m2/settings.xml里。如:

*<mirrors> *

* <mirror> *

* <id>UK</id> *

* <name>UK Central</name> *

* <url>**[http://uk.maven.org/maven2</url> ](http://uk.maven.org/maven2%3C/url%3E%C2%A0%C2%A0)*

* <mirrorOf>central</mirrorOf> *

* </mirror> *

*</mirrors> *

这样的话,就会给上面id为central的远程仓库做了个镜像。

以后向central这个仓库发的请求都会发到http://uk.maven.org/maven2而不是http://repo1.maven.org/maven2了。

<mirrorOf>central</mirrorOf>里是要替代的仓库的id。

如果填*,就会替代所有仓库。

高级镜像配置

为了满足一些复杂的需求,Maven还支持更高级的镜像配置:

1.<mirrorOf>*</mirrorOf>
匹配所有远程仓库。

2.<mirrorOf>external:*</mirrorOf>
匹配所有远程仓库,使用localhost的除外,使用file://协议的除外。也就是说,匹配所有不在本机上的远程仓库。

3.<mirrorOf>repo1,repo2</mirrorOf>
匹配仓库repo1和repo2,使用逗号分隔多个远程仓库。

4.<mirrorOf>*,!repo1</miiroOf>
匹配所有远程仓库,repo1除外,使用感叹号将仓库从匹配中排除。

需要注意的是,由于镜像仓库完全屏蔽了被镜像仓库,当镜像仓库不稳定或者停止服务的时候,Maven仍将无法访问被镜像仓库,因而将无法下载构件。

例子

个人的maven配置了阿里的镜像 , 而项目中需要使用到一些第三方jar包, 为了方便引入 , 已上传到192.168.0.201的nexus私服下.
但由于个人maven阿里的镜像使用默认mirrorOf规则=*, 所有的仓库都被镜像 , 不会再去192.168.0.201下下载第三方jar包
上传的第三方jar包目标路径 :
http://192.168.0.201:8081/nexus/content/groups/public/com/alipay/sdk-java/20170615110434/sdk-java-20170615110434.pom

被镜像后路径 :
http://maven.aliyun.com/nexus/content/groups/public/com/alipay/sdk-java/20170615110434/sdk-java-20170615110434.pom
所以需要修改镜像的mirrorOf规则 , 避免默认从镜像中下载

maven的conf/setting.xml

 <mirrors>
  <!--国内阿里云提供的镜像,非常不错-->
 <mirror>
  <!--This sends everything else to /public -->
  <id>aliyun_nexus</id>
  <!--对所有仓库使用该镜像,除了一个名为maven_nexus_201的仓库除外-->
  <!--这个名为maven_nexus_201的仓库可以在javamaven项目中配置一个repository-->
  <mirrorOf>*,!maven_nexus_201</mirrorOf>
  <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
 </mirror>
 </mirrors>

maven项目下的pom.xml配置一个远程仓库

<repositories>
  <!-- 192.168.0.201远程仓库 -->
  <repository>
   <id>maven_nexus_201</id>
   <name>maven_nexus_201</name>
   <layout>default</layout>
   <url>http://192.168.0.201:8081/nexus/content/groups/public/</url>
   <snapshots>
    <enabled>true</enabled>
    </snapshots>
  </repository>
</repositories>

http://192.168.0.201:8081/nexus下上传第三方jar包依赖

登陆已经安装好的nexus私有仓库,如图:

如何通过网页方式将jar包上传到nexus?

点击左边菜单“Repositories”,选择右边列表“3rd party“

如何通过网页方式将jar包上传到nexus?

点击“3rd party”,选择artifact Upload,如下图:

如何通过网页方式将jar包上传到nexus?

在artifact Upload界面显示的有GAV Parameter,groupId,artifactId,Version,Packaging等等参数,界面如图:

如何通过网页方式将jar包上传到nexus?

将以上参数填完之后,选择要上传的jar包,点击”add artifact“,最后点击”save“保存按钮即可,如下图所示:

如何通过网页方式将jar包上传到nexus?

maven项目下的pom.xml引入依赖

<dependency>
 <groupId>com.alipay</groupId>
 <artifactId>sdk-java</artifactId>
 <version>20170615110434</version>
</dependency>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Maven pom.xml与settings.xml详解

    pom.xml与settings.xml pom.xml与setting.xml,可以说是Maven中最重要的两个配置文件,决定了Maven的核心功能,虽然之前的文章零零碎碎有提到过pom.xml和settings.xml里面的内容,但都是大略带过,学习与研究地并不细致,本文的目的就是详细研究下这两个Maven重要的配置文件,从这两个配置文件可以牵出非常多的Maven话题.  Maven坐标 首先谈一下为什么要使用Maven坐标. Maven世界拥有数量非常巨大的构件,也就是平时使用的一些jar

  • Maven默认中央仓库(settings.xml 配置详解)

    Maven的安装 安装Maven之前要确保已经安装好了jdk,并且配置好了环境变量JAVA_HOME.具体安装步骤如下: 1. 从apache网上下载maven项目的压缩包.下载地址为:http://maven.apache.org/download.html.比如现在最新的Maven版本是3.0.4,那么我下载好的安装文件就是apache-maven-3.0.4.zip. 2. 将下载后的压缩包解压到Maven的安装目录,比如说是D:\\develop,那么解压后就是D:\\develop\\

  • Maven setting.xml配置文件详解

    maven的配置文件settings.xml存在于两个地方: 1.安装的地方:${M2_HOME}/conf/settings.xml 2.用户的目录:${user.home}/.m2/settings.xml 前者又被叫做全局配置,对操作系统的所有使用者生效:后者被称为用户配置,只对当前操作系统的使用者生效.如果两者都存在,它们的内容将被合并,并且用户范围的settings.xml会覆盖全局的settings.xml. Maven安装后,用户目录下不会自动生成settings.xml,只有全局

  • 详解maven的setting配置文件中mirror和repository的区别

    当maven需要到的依赖jar包不在本地仓库时, 就需要到远程仓库下载 . 这个时候如果mavensetting.xml中配置了镜像 , 而且镜像配置的规则中匹配到目标仓库时 , maven认为目标仓库被镜像了, 不会再去被镜像仓库下载依赖jar包, 而是直接去镜像仓库下载. 简单而言, mirror可以拦截对远程仓库的请求 , 改变对目标仓库的下载地址 repository repository就是个仓库. maven里有两种仓库,本地仓库和远程仓库. 远程仓库相当于公共的仓库,大家都能看到.

  • 详解maven中profiles使用实现

    目录 使用的场景 快速上手 pom.xml文件设置 目录结构 maven打包与激活profiles 通过IDEA的可视化的方式 更高级的玩法 通过和yml结合设置动态参数 打包不同的资源 使用的场景 常常遇到一些项目中多环境切换的问题.比如在开发过程中用到开发环境,在测试中使用测试环境,在生产中用生产环境的情况.springboot中提供了 spring.profile.active的方式来实现多环境的切换,通过设置环境变量和启动参数的方式.但是这样做终究不能一劳永逸,要么需要修改yml文件,要

  • 详解maven中央仓库连不上的解决办法

    方案一.使用国内的镜像阿里仓库等 首先通过maven的路径找到setting.xml的文件 然后在其中修改mirror和profile 保存一下就好了 方案二:https://maven.aliyun.com/mvn/search打开这个网站在里面下载你需要的jar包放到自己的本地仓库中 到此这篇关于详解maven中央仓库连不上的解决办法的文章就介绍到这了,更多相关maven中央仓库连不上内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

  • 详解Maven私服Nexus的安装与使用

    本文介绍了详解Maven私服Nexus的安装与使用,分享给大家,具体如下: 1.安装 1.1 安装docker并加速 yum update && yum install docker sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://y7u9p3i0.mirror.aliyuncs.com"

  • 详解Maven POM(项目对象模型)

    POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等. 执行任务或目标时,Maven 会在当前目录中查找 POM.它读取 POM,获取所需的配置信息,然后执行目标. POM 中可以指定以下配置: 项目依赖 插件 执行目标 项目构建 profile 项目版本 项目开发者列表 相关邮件列表信息 在创建 POM 之前,我们首先需要描述项目组 (groupId), 项目的

  • 详解maven配置多仓库的方法示例

    刚接触maven就是在公司里配置好的,所以一直以来使用都没毛病,所以一直没有去动这些固有的东西. 但是,后来把公司的电脑拿回家之后,发现有的东西就搞不起来了.原因也看一下就明白了,因为在公司的时候用的是公司的maven私服,所以回家后,用不了也是正常. 但是,真的脱离了公司,自己就不能工作了吗?不可能吧. 难道一下开源工具都必须要依赖于公司的网络? 这明显是不合理的. 那么,就扯出本次文章的意义了,在家里,自然是要公有的maven仓库了,那么,怎样配置maven仓库才能让自己用起来顺心呢? 1.

  • 详解maven BUILD FAILURE的解决办法

    问题描述 在使用IDEA的maven创建项目时总是失败,错误信息如下截图所示: 从图中可以看到是maven出了问题,在控制终端中执行maven help:system命令,测试能否正常build项目,执行错误信息如下所示: 尝试的解决办法: 删除C:\user\用户名.m2文件夹下的repository文件夹,选择maven–>clean–>install,重新build项目.(无效) 删除原有的maven文件夹,官网下载最新的maven包并进行相关配置.(无效) 修改.m2和maven\co

  • 详解maven依赖冲突以及解决方法

    什么是依赖冲突 依赖冲突是指项目依赖的某一个jar包,有多个不同的版本,因而造成类包版本冲突 依赖冲突的原因 依赖冲突很经常是类包之间的间接依赖引起的.每个显式声明的类包都会依赖于一些其它的隐式类包,这些隐式的类包会被maven间接引入进来,从而造成类包冲突 如何解决依赖冲突 首先查看产生依赖冲突的类jar,其次找出我们不想要的依赖类jar,手工将其排除在外就可以了.具体执行步骤如下 1.查看依赖冲突 a.通过dependency:tree是命令来检查版本冲突 mvn -Dverbose dep

  • 详解maven的install的作用

    一,使用eclipse 1,maven的install可以将项目本身编译并打包到本地仓库,这样其他项目引用本项目的jar包时不用去私服上下载jar包,直接从本地就可以拿到刚刚编译打包好的项目的jar包,很灵活,避免每次都需要重新往私服发布jar包的痛苦: 2,修改服务端比如manage层和dao层的项目的时候如果eclipse没有自动编译,则在调试的时候容易出很奇怪的错误,就是明明代码已经改好了,但是debug的时候还是在报错,这就是没有项目没有编译完成造成的,看到的改好的代码没有变成class

  • 详解Maven多模块打包遇到的问题解决方法

    项目描述: springboot+springcloud+zookeeper+eureka+maven:为多模块多module的分布式架构: 项目目录结构如下 父工程为server工程,其中有多个子module工程: 1.独立子工程:db.model.quartz.redis.util.basecontroller: 2.独立功能模块:dao.service.controller: 其中dao.service.controller分别依赖db.model.quartz.redis.util.ba

随机推荐