Maven之——仓库(下)
Maven之——仓库(下)
1、 快照版本号
Maven世界中不论什么项目或者构件都有自己的版本号。
Maven在构建时检測到构件是快照版本号、而且当前构件不是最新版本号的时候、就会自己主动更新、Maven的检測周期在前面在POM中配置仓库的时候提到过、<Repository>…<snapshot>true…、开启使用snapshot构件的时候、能够在snapshot标签内指定一个updatePolicy、默认值是daily、也就是每天检測一次更新、更具体的看上面。
从实际场景来理解快照版本号的意义:假设甲乙分别开发AB两个模块、乙开发的B高度依赖与甲开发的A模块、假设没有快照版本号的做法就是、甲每次更新A之后生成新的版本号号上传到Maven私服仓库中、乙每次使用的时候都要向甲询问是否有最新版本号、有的话就更新乙的B项目中关于A构件的依赖的版本号号、以便得到最新的版本号、这样不但繁琐、还有可能由于一时疏忽或者其它原因照成乙的B项目构建失败。
而假设使用快照版本号则能够非常好解决问题、Maven解析快照版本号的大致步骤例如以下——当甲将项目A定义成快照版本号、比方1.0-snapshot、然后上传到私服后(甲必须构件成功之后才干公布到私服仓库)、Maven检測到是快照版本号、就会自己主动为构件打上时间戳。
比方1.0-20141101.142213-1就表示2014年11月1日14点22分13秒第一次快照。
有了这个时间戳、Maven就能随时找到仓库中改构件的最新版本号、乙仅仅须要在B项目的POM文件的仓库配置中指定开启使用Snapshot模式、而且指定updatePolicy就能够了、这样Maven就会依据指定个更新周期定期的检測最新版本号、一旦有最新版本号、就会下载。
当项目经过完好的測试须要公布的时候、就能够将快照版改为公布版了、如将1.1-Snapshot 改成1.1版本号。表示该构件版本号已经稳定、我们在引用外部的构件的时候最好不要使用快照版本号、由于其不稳定性非常可能又有了最新的版本号、而最新的版本号与我们的需求不相符、导致构件失败。
2、 从仓库解析依赖的机制
当本地仓库没有所需的依赖的时候、Maven会自己主动从远程仓库下载、当依赖版本号为快照版本号的时候、Maven又会自己主动下载最新的快照版本号、Maven3不再支持在插件中配置RELEASE和LASTEST、本质原因是这样的解析策略会有可能使用不稳定版本号导致构件失败、详细的Maven从仓库解析依赖的规则:
1) 当依赖的范围是system的时候、Maven直接从本地文件系统解析构件。
2) 依据依赖坐标计算仓库路径后、尝试直接从本地仓库寻找构件、找到、则解析成功。
3) 在本地仓库中不存在情况下、假设依赖版本号是显示公布版也就是稳定版的构件即有明白指定的版本号号、如4.1,3.8等、则遍历全部远程仓库、找到后、下载并解析使用。
4) 假设历来的版本号是SNAPSHOT的时候、则基于更新策略读取全部远程仓库的元数据groupId/artifactId/verion/maven-metatata.xml将其与本地仓库合并后、得到最新的快照版本号、然后检測本地仓库或者从远程仓库下载。
5) 假设最后解析的是时间戳格式的快照版、则将时间戳格式是文件复制至非时间戳格式、并使用。
3、 镜像
假设仓库X能够提供仓库Y存储的全部内容、那么就能够觉得X是Y的一个镜像、换句话说、不论什么能够从仓库Y中获得的构件、都能够从它的镜像中获取。
关于镜像的配置是在settings.xml中:
<mirrors>
<mirror>
<id>mirrorId</id>
<mirrorOf>repositoryId</mirrorOf>
<name>Human Readable Name for thisMirror.</name>
<url>http://my.repository.com/repo/path</url>
</mirror>
</mirrors>
关键是mirrorOf、指定的是被代理的仓库的ip、此仓库也在前面提到过。
比方我们为前面配置的jboss仓库、如6.4
<repositories>
<repository>
<id>jboss-maven2-release-repository</id>
<name>JBoss Repository</name>
<url>http://repository.jboss.org/maven2/</url>
<layout>default</layout>
<!--<snapshots>-->
<!--<enabled>false</enabled>-->
<!--</snapshots>-->
<snapshots>
<enabled>true</enabled>
<checksumPolicy>ignore</checksumPolicy>
<updatePolicy>daily</updatePolicy>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
配置一个代理、假如代理仓库的是我们自己搭建的私服(普通情况下我们都会使用私服代理全部外部远程仓库)URL:http://192.168.1.8/content/repositories则镜像的配置:
<mirrors>
…
<mirror>
<id>nexus</id>
<mirrorOf> jboss-maven2-release-repository</mirrorOf>
<name>Mirror of jboss</name>
<url> http://repository.jboss.org/maven2/</url>
</mirror>
…
</mirrors>
假设想要使用私服代理全部远程仓库、则仅仅需将<mirrorOf> jboss-maven2-release-repository</mirrorOf>改为:<mirrorOf> *</mirrorOf>就能够了。
更高级的镜像配置:
<mirrorOf>*</mirrorOf> : 匹配全部远程仓库
<mirrorOf>external:*</mirrorOf>: 匹配全部不在本机的远程仓库
<mirrorOf>repo1, repo2</mirrorOf>: 匹配仓库repo1、repo2、使用逗号切割多个远程仓库。 <mirrorOf>*, ! repo1</mirrorOf>: 匹配全部远程仓库、repo1除外、使用!将远程仓库从匹配中排除。
4、 仓库搜索服务
使用Maven进行日常开发的时候、当知道须要使用的项目、构件的名称的时候、就能够依据名称去搜索其坐标、进而在项目中使用、以下是几个经常使用的提供仓库搜索服务的网址:
1) Sonatype Nexus
地址:http://repository.sonatype.org/
2) Central Repository
地址:http://search.maven.org/#browse
3) MVNrepository
4) jboss-maven2-release-repository(可作为下载地址、不提供搜索功能)
地址:http://repository.jboss.org/maven2/
总结
理解Maven仓库概念、Maven仓库布局、能够通过构件的信息知道其在Maven仓库中的位置、理解Maven本地仓库、远程仓库、中央仓库的概念、知道中央仓库是在哪里指定的(%M2_HOME/lib/maven-model-builder-3.2.3.jar/org/apache/maven/model/pom.xml)。
理解仓库的配置、知道怎样配置远程仓库、当须要认证的时候知道怎样配置认证信息。
理解快照版本号存在的意义、掌握从仓库解析依赖的机制(注意Maven3以后的差别、就是插件配置不再提供RELEASE和LASTEST属性)、最后是镜像的概念、掌握怎样为指定仓库、或者随意仓库配置镜像。
Maven之——仓库(下)的更多相关文章
- 实战maven私有仓库三部曲之三:Docker下搭建maven私有仓库
本章是<实战maven私有仓库>系列的第三篇,在前两章中,我们先在linux搭建maven私有仓库,然后在开发环境使用此仓库,本章我们在docker下快速搭建maven私有仓库,然后像前面 ...
- maven联通网络下中央仓库不能访问的解决办法
最近刚开始学习maven工具,下载解压完毕,环境变量配置完毕,运行如下命令尝试快速构建一个maven项目: mvn archetype:generate 结果就有问题: [INFO] Scanning ...
- (十一)Maven远程仓库的各种配置
1.远程仓库的配置 在平时的开发中,我们往往不会使用默认的中央仓库,默认的中央仓库访问的速度比较慢,访问的人或许很多,有时候也无法满足我们项目的需求,可能项目需要的某些构件中央仓库中是没有的,而在其他 ...
- 使用Nexus搭建Maven本地仓库
阅读目录 序 Nexus 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 序 在工作中可能存在有 ...
- maven 本地仓库和远程仓库
在Maven中,任何一个依赖.插件或者项目构建的输出,都可以称之为构件. Maven在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库.(仓库就是存放依赖和插件的地方) 任何的 ...
- Maven本地仓库及远程仓库
转载自:http://blog.csdn.net/wanghantong/article/details/36427433 Maven 仓库的分类: maven的仓库只有两大类:1.本地仓库 2.远程 ...
- nexus 搭建maven本地仓库
使用Nexus搭建Maven本地仓库 阅读目录 序 Nexus 序 在工作中可能存在有些开发机器不能上网,大量的机器获取jar包会导致公司网络很慢,还有时候公司会自己发布自己的项目版本,其他的项目 ...
- [maven] 使用Nexus创建maven私有仓库
1.为什么需要maven私有仓库? 从Maven中央仓库下载所需的jar包,需要外网的支持.如果公司不能上外网的话则不能从中央仓库下载所需jar包,公司网速慢的时候也会影响项目构建的速度.用户可以用n ...
- maven本地仓库.m2文件夹路径讲解
Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Depen ...
随机推荐
- 使用Guava retryer优雅的实现接口重试机制
转载自: 使用Guava retrying优雅的实现接口重调机制 Guava retrying:基于 guava 的重试组件 实际项目中,为了考虑网络抖动,加锁并发冲突等场景,我们经常需要对异常操作进 ...
- 【hdoj_1133】Buy the Ticket(卡特兰数+大数)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1133 题目的意思是,m个人只有50元钱,n个人只有100元整钱,票价50元/人.现在售票厅没钱,只有50元 ...
- 洛谷P2827 蚯蚓 题解
洛谷P2827 蚯蚓 题解 题目描述 本题中,我们将用符号 ⌊c⌋ 表示对 c 向下取整. 蛐蛐国最近蚯蚓成灾了!隔壁跳蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓. 蛐蛐国里现 ...
- Codeforces Round #278 (Div. 1) B - Strip dp+st表+单调队列
B - Strip 思路:简单dp,用st表+单调队列维护一下. #include<bits/stdc++.h> #define LL long long #define fi first ...
- 洛谷P3275 [SCOI2011]糖果 [差分约束系统]
题目传送门 糖果 题目描述 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比 ...
- springMVC整合freemarker遇到的问题 maven
java.lang.IllegalAccessError: tried to access method freemarker.ext.servlet.AllHttpScopesHashModel.& ...
- MongoDB——环境搭建
项目中需要将一些读多改少的数据存入到 MongoDB 数据库中来提高效率,于是简单学习一些MongoDB数据库的知识,来进行应对,也是对自己知识盲区进行补充.本文主要学习介绍MongoDB数据库在Li ...
- 「WC2018即时战略」
「WC2018即时战略」 题目描述 小 M 在玩一个即时战略 (Real Time Strategy) 游戏.不同于大多数同类游戏,这个游戏的地图是树形的.也就是说,地图可以用一个由 \(n\) 个结 ...
- AHOI2018训练日程(3.10~4.12)
(总计:共90题) 3.10~3.16:17题 3.17~3.23:6题 3.24~3.30:17题 3.31~4.6:21题 4.7~4.12:29题 ZJOI&&FJOI(6题) ...
- [BZOJ4892][TJOI2017]DNA(后缀数组)
题目描述 加里敦大学的生物研究所,发现了决定人喜不喜欢吃藕的基因序列S,有这个序列的碱基序列就会表现出喜欢吃藕的性状,但是研究人员发现对碱基序列S,任意修改其中不超过3个碱基,依然能够表现出吃藕的性状 ...