Maven(三) 仓库 repository

目录

  • 1 仓库
    • 1.1 本地仓库(.m2)
    • 远程仓库(联网)
    • 1.3 远程仓库(私服)
    • 1.4 使用镜像

1 仓库

  1. 本地仓库(.m2)
  2. 远程仓库(联网)
  3. 远程仓库(私服)
  4. 使用镜像

1.1 本地仓库(.m2)

运行原理
运行Maven的时候,Maven所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。

示例说明
你的项目配置了junit-3.8的依赖,在你运行mvn test 的时候,Maven需要使用junit-3.8的jar文件,它首先根据坐标查找本地仓库,如果找到,就直接使用。如果没有,Maven会检查可用的远程仓库配置,然后逐个尝试这些远程仓库去下载junit-3.8的jar文件,如果远程仓库存在该文件,Maven会将其下载到本地仓库中,继而使用。如果尝试过所有远程仓库之后,Maven还是没能够下载到该文件,它就会报错。

仓库位置
1. 默认仓库的存储位置:

Maven缺省的本地仓库路径为${user.home}/.m2/repository
这里写图片描述
2. 自定义修改仓库的存储位置:

可改变默认的 .m2 目录下的默认本地存储库文件夹
通过修改${user.home}/.m2/settings.xml 配置本地仓库路径 ,没有settings这个xml文件就新建,或者如下复制个;具体看图:
这里写图片描述

  
D:/.m2/repository  

3. 运行时指定本地仓库位置:
mvn clean install -Dmaven.repo.local=/home/juven/myrepo/

还有一点需要理解的是,当我们运行install的时候,Maven实际上是将项目生成的构件安装到了本地仓库,也就是说,只有install了之后,其它项目才能使用此项目生成的构件。

远程仓库(联网)

接着了解一下Maven缺省的远程仓库,即Maven中央仓库:
运行原理
安装好Maven之后,我们可以建立一个简单的项目,配置一些简单的依赖,然后运行mvn clean install,项目就构建好了。我们没有手工的去下载任何jar文件,这一切都是因为Maven中央仓库的存在,当Maven在本地仓库找不到需要的jar文件时,它会查找远程仓库,而一个原始的Maven安装就自带了一个远程仓库——Maven中央仓库。

仓库位置
这个Maven中央仓库是在哪里定义的呢?

  1. maven-2.xxx,可以找到这个文件:${M2_HOME}/lib/maven-2.0.10-uber.jar;
  2. maven-3.xxx版本之后,在maven可以找到这个文件:/lib/maven-model-builder- ${version}.jar中;

打开该文件,能找到超级POM:orgapachemavenmodelpom-4.0.0.xml ,它是所有Maven POM的父POM,所有Maven项目继承该配置,你可以在这个POM中发现如下配置:

    central  Central Repository  https://repo.maven.apache.org/maven2  default    false      
 

关于远程仓库的配置,下面的我会详细解释,这里我们只要知道,中央仓库的id为central,远程url地址为http://repo.maven.apache.org/maven2,它关闭了snapshot版本构件下载的支持。

1.3 远程仓库(私服)

在POM中配置远程仓库
前面我们看到超级POM配置了ID为central的远程仓库,我们可以在POM中配置其它的远程仓库。这样做的原因有很多,比如你有一个局域网的远程仓库,使用该仓库能大大提高下载速度,继而提高构建速度,也有可能你依赖的一个jar在central中找不到,它只存在于某个特定的公共仓库,这样你也不得不添加那个远程仓库的配置。

1.3.1 pom.xml中配置远程仓库
这里配置一个远程仓库指向中央仓库的中国镜像,需要在你的maven项目pom.xml文件中增加:

  
...      maven-net-cn  Maven China Mirror  http://maven.net.cn/content/groups/public/    true      false            maven-net-cn  Maven China Mirror  http://maven.net.cn/content/groups/public/    true      false            
...  
  

1. 讲解:
我们先看一下的配置,你可以在它下面添加多个 ,每个都有它唯一的ID,一个描述性的name,以及最重要的,远程仓库的url。此外,true告诉Maven可以从这个仓库下载releases版本的构件,而false告诉Maven不要从这个仓库下载snapshot版本的构件。禁止从公共仓库下载snapshot构件是推荐的做法,因为这些构件不稳定,且不受你控制,你应该避免使用。当然,如果你想使用局域网内组织内部的仓库,你可以激活snapshot的支持。

2. 讲解:
至于,这是配置Maven从什么地方下载插件构件(Maven的所有实际行为都由其插件完成)。该元素的内部配置和完全一样,不再解释。

1.3.2 settings.xml中配置远程仓库
我们知道了如何在POM中配置远程仓库,但考虑这样的情况:在一个公司内部,同时进行这3个项目,而且以后随着这几个项目的结束,越来越多的项目会开始;同时,公司内部建立一个Maven仓库。我们统一为所有这些项目配置该仓库,于是不得不为每个项目提供同样的配置。问题出现了,这是重复 !
其实我们可以做到只配置一次,在哪里配置呢?就是settings.xml。
不过事情没有那么简单,不是简单的将POM中的及元素复制到settings.xml中就可以,setting.xml不直接支持 这两个元素。但我们还是有一个并不复杂的解决方案,就是利用profile,如下:

  ...      dev          dev    ...  
  

这里我们定义一个id为dev的profile,将所有repositories以及pluginRepositories元素放到这个profile中,然后,使用元素自动激活该profile。这样,你就不用再为每个POM重复配置仓库。
使用profile为settings.xml添加仓库提供了一种用户全局范围的仓库配置。

1.4 使用镜像

需求:

  1. 如果你的地理位置附近有一个速度更快的central镜像;
  2. 你想覆盖central仓库配置;
  3. 你想为所有POM使用唯一的一个远程仓库(这个远程仓库代理的所有必要的其它仓库)。

注: 如果配置了镜像,maven将不再去找中央工厂统一去找镜像地址下载
你可以使用settings.xml中的mirror配置。
以下的mirror配置用maven.net.cn覆盖了Maven自带的central:

  
...      maven-net-cn  Maven China Mirror  http://maven.net.cn/content/groups/public/  central      
...  
 

1、在mirrorOf与repositoryId相同的时候优先是使用mirror的地址
2、mirrorOf等于*的时候覆盖所有repository配置
3、存在多个mirror配置的时候mirrorOf等于*放到最后
4、只配置mirrorOf为central的时候可以不用配置repository


X:工具maven资源
epositorynexus-aliyunNexus aliyuncentralhttp://maven.aliyun.com/nexus/content/groups/publicnexus-mineNexus mine*http://xx.xx.xx.xx/nexus/content/groups/public

nexus-aliyun使用阿里云的镜像作为central中央仓库

nexus-mine作为私服,mirrorOf配置为*来提供中央仓库中不存在的jar包

proxy是服务器不能直接访问外网时需要设置的代理服务,不常用 server是服务器要打包上传到私服时,设置私服的鉴权信息 repository是服务器下载jar包的仓库地址 mirror是用于替代仓库地址的镜像地址


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部