maven仓库和镜像
本文主要是针对《maven实战》书中关键知识点的学习记录,未免有纰漏或描述不到之处,建议购买阅读原书
本文涉及一些maven仓库和镜像中一些简单的概念
简介
对于maven来说,仓库只分为2类,本地仓库和远程仓库。maven的规则是优先在本地仓库进行寻找,如果本地仓库没有,那么便从远程仓库进行获取。如果二者都没有,那么会报错。
比较多的情况是,maven会因为网络的原因,而仓库里并没有下载到jar包,而只有.jar.lastupdate和.pom这2个文件。而查看pom.xml文件的时候也不会报错。那么久需要删除本地仓库中,这个包的目录,重新下载。
私服也属于是远程仓库,私服的目的是为了节约网络带宽,而在局域网内搭建的一个maven服务器。
本地仓库
当没有修改本地maven配置的时候,默认会在当前用户目录下的.m2/repository/下作为本地的仓库。在maven安装目录的conf下有个settings.xml的文件,可以对本地仓库的路径进行设置。
<settings>
<localRepository>D:/maven/maven-repository/</localRepository>
</settings>
注意,其实还有一种settings是可以只针对当前用户的,就是在.m2/settings.xml,不过这个xml文件一般是不存在,需要自己手工的去创建。而conf目录下的settings文件,是一个全局的配置,是针对于所有的用户。
远程仓库
本地仓库像是我们自己的书房,我们在自己的书房里去寻找某本书,发现没有,那么久是去书店或在网上去购买。在maven世界中,书店或网上商城,都可以看做是远程仓库。
远程仓库中使用比较多的是central仓库(也是默认仓库),此外还有一些如Jboss的远程仓库,具体要根据项目的实际情况来设置。
maven默认使用central仓库,如果还需要使用其他仓库,则需要再pom.xml中进行类似下面的配置
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
注意里面的snapshot的值为false,表示不从仓库中下载快照版本。因为snapshot是经常发生变化的,而我们实际使用的包,往往都希望是稳定的,这样对于我们的工程来讲是比较安全。
远程仓库的更新
与snapshot有类似作用的一个标签是release,表示对发行版本的下载。默认是true。而snapshot和release这2个标签,都有2个子元素。
<snapshots>
<enabled>true</enabled>
<updatePolicy>daily</updatePolicy>
<checksumPolicy>ignore</checksumPolicy>
</snapshot>
updatePolicy表示检查更新的策略,默认是每天更新一次,其他值包括never从不检查更新;always每次构建时都检查更新;interval X, 每隔x分钟检查一次
checksumPolicy是针对于校验和,当文件被部署到远程仓库中时,会生成一份校验和的文件,有点类似数字签名,来代表这个文件没有被修改过。在maven下载的时候,会根据校验和文件来进行校验,如果校验失败,那么会根据这个属性来决定是否要进行警告。ignore则表示不进行警告,还有warn表示构建时给予警告,而fail表示会让构建变为失败。
远程仓库的认证
一般我们像私服都会是公示自己内部构建的,那么有的私服仓库可能不适用于其他部门,那么会有一个账户密码的认证。这个配置信息是存在在settings.xml中的。值得注意的是,里面的这个id,需要和你在pom.xml中配置的id要一致。
<servers>
<server>
<id>my-proj</id>
<username>repo-my</username>
<password>123123</password>
</server>
</servers>
部署到远程仓库
在工程的pom.xml文件内,需要进行配置,而这个配置是distributionManagement元素。
<distributionManagement>
<repository>
<id>proj-my</id>
<name>123</name>
<url>http://xxx</url>
</repository>
<snapshotRepository>
<id>proj-my</id>
<name>123</name>
<url>http://xxx</url>
</snapshotRepository>
</distributionManagement>
snapshotRepository表示是快照版本要发布的仓库地址。一般这种部署都是需要认真的,而认证的配置就是上面说提到的。
真的要进行部署的时候,就执行mvn clean deploy 即可。
快照版本
试想,有2个部门因为某项紧急的任务需要合作,2个部门的工作需要同时展开,工作中需要将自己的功能代码发布到局域网内的私服仓库中去。如果maven没有快照的机制,那么可能在每次其中一个部门发布一个版本的时候,那么就需要通知另外的部门,将pom.xml文件中的版本号去进行修改。
显然,这是一件很麻烦的事情。
快照版本要解决的就是类似这样,可能会频发发布版本,而又不需要去修改pom.xml的情形。在发布到私服的过程中,maven会自动将snapshot进行替换,打上时间戳。那么另外的一个部门,在进行获取的时候,就可以根据时间戳来获取到最新的文件,这个检查默认是每次执行一次。
快照的版本应该只在组织内部或模块间的依赖中使用,因为快照是十分不稳定的版本,可能今天构建时可以了,但到了明天就不行。
依赖解析
- 当依赖的范围是system时,直接从本地文件系统解析构件
- 根据依赖坐标计算仓库路径,先尝试从本地寻找,本地没有,则从远程仓库去获取
- 在本地仓库不存在的情况下
- 如果依赖的构件是显示的发布版本,例如1.2.1或者1.2.-beta-1这种,则便利所有远程仓库,发现则下载。
- 如果是RELEASE或LATEST,则基于更新策略,读取所有远程仓库的元数据
groupId/artifactId/version/maven-metadata.xml,与本地仓库对应的元数据进行合并,得到RELEASE或LATEST的真实值 - 如果是SNAPSHOT,读取所有远程仓库的元数据
groupId/artifactId/version/maven-metadata.xml,与本地仓库对应的元数据进行合并,得到SNAPSHOT的真实值 - 如果最后解析得到的构件版本是时间戳格式的快照(e.g. 1.4.1-20191101.121403-3),则复制时间戳格式的文件至非时间戳格式。如SNAPSHOT。
镜像
镜像的作用和cdn很类似,因为GFW的关系,很多外国的仓库访问速度很慢或者无法访问,那么就可以借助一些国内的一些大公司提供的镜像地址来加快文件的下载,个人用的比较多的是阿里的镜像地址。
<mirrors>
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
</mirrors>
maven仓库和镜像的更多相关文章
- 【转】maven仓库快速镜像
本文转自:http://blog.csdn.net/zuoluoboy/article/details/20007819 国内连接maven官方的仓库更新依赖库,网速一般很慢,收集一些国内快速的mav ...
- Maven仓库国内镜像站
感谢阿里巴巴,搭建并公开了Maven仓库的国内镜像站.话外:使用Maven的官方仓库真的是太slow了! 在<Maven Root>/conf/settings.xml中的<mirr ...
- maven仓库国内镜像
<mirror> <id>alimaven</id> <name>aliyun maven</name> ...
- maven仓库快速镜像
国内连接maven官方的仓库更新依赖库,网速一般很慢,收集一些国内快速的maven仓库镜像以备用. ====================国内OSChina提供的镜像,非常不错=========== ...
- 给maven仓库添加镜像
用maven下载好慢啊,快试试阿里云镜像吧!修改$MAVEN_HOME/conf/settings.xml <!-- 阿里云仓库 --> <mirror> <id> ...
- Maven仓库 国内镜像
<repositories> <repository> <id>repo-mirror</id> <url>http://maven.net ...
- 04 Maven 仓库
Maven 仓库 在 Maven 坐标与依赖 中详细介绍了 Maven 坐标和依赖,坐标和依赖是任何一个构件在 Maven 世界中的逻辑表示方式:而构件的物理表示方式是文件, Maven 通过仓库来统 ...
- 常用 Maven 仓库地址
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/niuzhucedenglu/article ...
- 国内下载比较快的Maven仓库镜像
#收集的比较快的maven仓库 http://maven.wso2.org/nexus/content/groups/public/ http://jcenter.bintray.com/http:/ ...
随机推荐
- STL——容器(List)list 数据的存取
list.front(); //返回第一个元素 list.back(); //返回最后一个元素 1 #include <iostream> 2 #include <list> ...
- Vue高仿网易云网页端源码
音乐播放器虽然烂大街了,但是作为前端没自己撸一个一直是个遗憾, 而且偶然间发现 pc 端 web 版的网易云音乐做的实在是太简陋了, 社区仿 pc 客户端的网易云也不多见,为了弥补这个遗憾, 就用 ...
- Java静态方法和非静态方法之间的关系
非静态方法 public class Demo2 { public static void main(String[] args) { //实例化这个类 new //对 ...
- JavaSE10-继承&super&this&抽象类
1.继承 1.1 概述 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那一个类即可. 其中,多个类可以称为子类,单独那一个类称为父类.超类(s ...
- ADF 第五篇:转换数据
映射数据流(Mapping Data Flow)的核心功能是转换数据,数据流的结构分为Source.转换和Sink(也就是Destination),这种结构非常类似于SSIS的数据流. 在数据流中,数 ...
- 面试 09-02.js运行机制:异步和单线程
09-02.js运行机制:异步和单线程 #前言 面试时,关于同步和异步,可能会问以下问题: 同步和异步的区别是什么?分别举一个同步和异步的例子 一个关于 setTimeout 的笔试题 前端使用异步的 ...
- Python十大装B语法!你会几种?
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 Python 是一种代表简单思想的语言,其语法相对简单,很容易上手.不过,如果就此小视 Python ...
- 5分钟完全掌握Python协程
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 1. 协程相关的概念 1.1 进程和线程 进程(Process)是应用程序启动的实例,拥有代码.数据 ...
- DataTable添加checkbox实现表格数据全选,单选(点选)
Datatables是一款jquery表格插件.它是一个高度灵活的工具,可以将任何HTML表格添加高级的交互功能. 分页,即时搜索和排序 几乎支持任何数据源:DOM, javascript, Ajax ...
- Prometheus从入门到精通:一、部署
一.Prometheus是什么? prometheus是一个开源指标监控解决方案,指标就是指的CPU的使用率.内存使用率等数据. 二.Prometheus的架构 这里直接粘贴官网的架构图: 三.安装 ...