Maven 您所在的位置:网站首页 mavenaliyuncom Maven

Maven

#Maven| 来源: 网络整理| 查看: 265

前言下载RepositoryRepository配置MirrorMirror配置maven的整体流程推荐最佳的配置方式仓库id和Mirror的关联参考

前言

maven是java常用的包管理系统。这里主要介绍下maven使用。

下载

maven需要单独下载,如果使用idea会默认集成的。它会自动下载关联相关的java库。它的默认路径是:~/.m2 当前用户目录所在的隐藏文件。它的默认仓库地址是: ~/.m2/repository 它的默认配置文件是: ~/.m2/setting.xml

Repository

maven主要由2个仓库的概念,local repository 本地存在的仓库,即所在的默认仓库地址,remote repository 远程所在的仓库地址。注:图片来自于参考连接中的。

repository存放了很多的jar和插件。 当向仓库清酒插件或者依赖时,先检查local repository是否存在,存在直接返回。不存在的话,请求remote repository仓库。

Repository配置

在setting文件中,可以配置多个repository,例如:

aliyun aliyun maven http://maven.aliyun.com/nexus/content/groups/public/ true false

Mirror

mirror相当于一个拦截器,它会拦截maven对remote repository仓库的访问,并将请求重新定向到mirror里面配置的地址。注:图片来自于参考链接中。

Mirror配置

mirror存在于 setting.xml 文件中,可以配置多个,配置如下。

internal-repository Maven Repository Manager running on repo.mycompany.com http://repo.mycompany.com/proxy external:*,!foo foo-repository Foo http://repo.mycompany.com/foo foo

官方参考文档:http://maven.apache.org/guides/mini/guide-mirror-settings.html

这里的id,name不重要,只是拦截器的id和名称。主要关键在于 mirrorOf 和url。mirrofOf 决定了拦截器如何拦截,url是拦截后重定向的地址。mirrorOf取值如下:

* = everything 匹配所有的仓库external:* = everything not on the localhost and not file based. 匹配非本地的仓库repo,repo1 = repo or repo1 匹配仓库1或者仓库2*,!repo1 = everything except repo1 匹配所有的仓库,repo1除外。

重点注意点:

如果不配置,那么它会默认走maven自己的中央仓库地址。mirrofOf是center如果 mirrors 下面配置了多个 mirror ,只要有1个配置了 mirrofOf:* ,那么其他的都不再生效,全部走这个mirrorOf的url,所有慎重配置*

maven的整体流程 首先,我们的pom文件可以指定 repository ,我们的 setting.xml 中的 profiles 也可以指定repository 。一般推荐在xml文件中配置一个profiles,然后默认激活,这样所有的pom都不需要指定 repository 地址了。如下: aliyun aliyun aliyun maven http://maven.aliyun.com/nexus/content/groups/public/ true false aliyun 当你需要下载一个新的jar时,maven首先会找到 pom 和 setting.xml 中配置的repository 集合,这样就拿到了所有的仓库。拿到仓库后,仓库配置了id,这里拿到了所有的仓库id。之后依次过滤 mirrors 配置的mirrorOf 拦截器。如果 repository 的id和mirror的 mirrorOf 的值相同,则该mirror的配置将会替代该repository , 如果该repository 找不到任何一个对应的mirror,则使用其本身配置的地址。

推荐最佳的配置方式

我们经常需要在公司私服的 repository 和个人需要的阿里云私服地址进行来回切换,这里推荐一种方便切换的方式。

首先在 setting.xml 中配置上2个 repository 地址,如下: nexus nexus 公司私服地址 xxxxxxxxxxxx true false aliyun aliyun aliyun的maven地址 http://maven.aliyun.com/nexus/content/groups/public/ true false nexus 配置下拦截器 mirrors 如下: aliyun central http://maven.aliyun.com/nexus/content/groups/public/ nexus *,!aliyun xxxxxxx 由于默认激活了 nexus 配置,那么我们的idea就会提示出来如下的信息,可以选择了。

一下就是重点内容了:

如果使用的项目是公司项目,那么profiles采取nexus,mirror过滤时,会采取mirror的nexus配置。如果使用的项目是个人项目,那么profiles采取aliyun,mirror过滤时,会采取mirror的alimaven配置。

原因:个人配置时,首先选择了prifiles时指定了repository是aliyun。当新的jar需要下载时,会经过mirrors拦截。 第一个 *,!aliyun 由于你选择的仓库是aliyun,所以过滤了,剩下的就是去中央仓库查找了,这里中央仓库替代了aliyun地址,就找到了。反之,公司地址一样的。

仓库id和Mirror的关联

maven需要配置一个central的mirror,代表从中央仓库获取。这里的匹配原则是:pom或者profiles中配置的repositoryId和mirror中的mirrorOf进行比较,一样的匹配到了mirror。不一样的,继续往下找。所以一般可以选择2个,一个central,一个是*.然后配置的仓库repository的id都是central就可以了。

参考 Maven:mirror和repository 区别maven的setting配置文件中mirror和repository的区别maven中mirror与repositories的关系maven配置多仓库镜像


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有