Maven实践(七)---仓库
来源:互联网 发布:精美立体数据图表 ppt 编辑:程序博客网 时间:2024/06/16 20:47
任何一个构建都有其唯一的坐标,根据这个坐标可以定义其在仓库中的唯一存储路径,这便是Maven的仓库布局方式。
仓库的分类
1.本地仓库:首先查看这个仓库,存在构件直接使用(默认情况下在用户目录的.m2/repositiory/下)
自定义本地仓库目录地址:
<settings> <localRepository>自定义的目录</localRepository></settings>
2.远程仓库:构件不存在或者查看是否有新版本,去这个仓库查看
Tips:如果2个仓库都没有就会报错
远程仓库:
- 中央仓库:Maven核心自带的远程仓库
- 私服:在局域网内部架设,用其代理所以外部仓库
- 其他公共库:常见的有Java.net
Maven库和JBoss Maven库
远程仓库的配置
默认的中央仓库无法满足项目的需求,可能项目需要的构建存在于另外一个远程仓库(如JBoss Maven库),具体配置如下:
<project>... <repositories> <repository> <id>jboss</id> <name>JBoss Repository</name> <url>http://repository.jboss.com/maven2/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> <layout>default</layout> </repository> </repositories>... </project>
任何一个仓库声明的id必须是唯一的,Maven自带的仓库id为central,仓库同名,将会覆盖
releases控制Maven对发布版本构件的下载
snapshots控制Maven对快照版本构件的下载
这2个元素有3个子元素:enabled、updatePolicy(从远程仓库更新的频率默认为daily;never、always、interval:X分钟)、checksumPolicy(校验和,warn发出警告,fail失败,ignore忽略)
远程仓库的认证
配置认证信息和配置仓库信息不同,仓库信息可以直接配置在POM文件中,但是认证信息必须配置在settings.xml文件中
【因为一般POM被提交到代码仓库中,供所有成员访问,settings.xml一般只放在本机,更为安全】
配置代码如下:
<settings>... <servers> <server> <id>my</id> <username>repo-user</username> <password>repo-pwd</password> </server> </servers>...</settings>
Tips:这里的关键是*id元素,settings.xml中server元素的id必须与POM中需要认证的repository元素的id完全一致*
部署至远程仓库
在项目的pom.xml文件中进行配置distributionManagement元素,代码如下:
<project>... <distributeManagement> <repository> <id>proj-releases</id> <name>PRroj Releases Repository</name> <url>仓库的地址</url> <snapshotRepoository> <id>proj-snapshots</id> <name>PRroj Snapshots Repository</name> <url>仓库的地址</url> </snapshotRepoository> <layout>default</layout> </repository> </distributeManagement>... </project>
其中repository元素表示发布版本构件的仓库,snapshotRepoository元素表示快照版本的仓库,id元素是仓库的唯一标识
Tips:往远程仓库部署构建的时候,往往需要认证
命令 mvn clean deploy
会将项目构建输出的够将部署到配置对应的远程仓库
快照版本
快照版本只应该在组织内部的项目或模块间依赖使用,因为这时组织对这些快照版本的依赖具有完全的理解及控制权
从仓库解析依赖的机制
当本地仓库没有依赖构件的时候,Maven会自动从远程仓库下载:当依赖版本为快照版本的时候,Maven会自动找到最新的快照,这背后的依赖解析机制如下:
- 当依赖的范围是system的时候,Maven直接从本地文件系统解析构件
- 根据依赖坐标计算仓库路径后,尝试直接从本地仓库寻找构件,如果发现相应构件,则解析成功
- 在本地仓库不存在相应构件的情况下,如果依赖版本是显示的发布版本构件,则遍历所以远程仓库,发现后,下载并解析使用
- 如果依赖版本是RELEASE或者LATEST,则基于更新策略读取所以远程仓库的元数据
groupId/artifactId/maven-metadata.xml
,将其与本地仓库的对应元数据合并后,计算出RELEASE或者LATEST的真实值,然后基于这个真实值检查本地和远程仓库,步骤如2 3 - 如果依赖的版本是SNAPSHOT,则基于更新策略读取所以远程仓库的元数据
groupId/artifactId/version/maven-metadata.xml
,将其与本地仓库的对应元数据合并后,得出最新的快照版本的值,然后基于这个值检查本地和远程仓库,步骤如2 3 - 如果最后解析到的构件版本是时间戳格式的快照,则复制其时间戳格式的文件至非时间戳格式,如SNAPSHOT,并使用该非时间戳格式
镜像
如果仓库X可以提供仓库Y存储的所有内容,那么X就是Y的镜像,http://maven.net.cn/context/groups/public/是中央仓库http://repo1.maven.org/maven2/在中国的镜像
配置镜像需要编辑settings.xml文件,如下:
<settings>... <mirrors> <mirror> <id>maven.net.cn</id> <name>one of the central mirrirs in China</name> <url>http://maven.net.cn/context/groups/public/</url> <mirrorof>central</mirrorof> </mirror> </mirrors>...</settings>
mirrorof元素的值为central,表示任何对中央仓库的访问请求都会转到该镜像
配置镜像的几种方式:
<mirrorof>*</mirrorof>:
匹配所有远程仓库<mirrorof>external:*</mirrorof>:
匹配所有远程仓库,使用localhost的除外,使用file://协议的除外(匹配所有不在本机的仓库)<mirrorof>repo1,repo2</mirrorof>:
匹配仓库repo1,repo2(使用都好分割多个远程仓库)<mirrorof>*,!repo1</mirrorof>:
匹配所有远程仓库,repo1除外(使用感叹号将仓库从匹配中排除)
仓库搜索服务
Sonatype Nexus:地址:http://repository.sonatype.org/
Jarvana:地址:http://www.jarvana.com/jarvana/
MVNbrowser:地址:http://www.mvnbrowser.com/
MVNrepository:地址:http://mvnrepository.com/
- Maven实践(七)---仓库
- maven(七)仓库
- maven(七),本地仓库
- Maven最佳实践:Maven仓库
- Maven最佳实践:Maven仓库
- Maven最佳实践:Maven仓库
- Maven最佳实践:Maven仓库
- Maven最佳实践:Maven仓库
- Maven最佳实践:Maven仓库
- Maven最佳实践:Maven仓库
- Maven最佳实践:Maven仓库
- Maven最佳实践:Maven仓库
- Maven最佳实践:Maven仓库
- Maven最佳实践:Maven仓库
- Maven最佳实践:Maven仓库
- Maven最佳实践:Maven仓库
- Maven最佳实践:Maven仓库
- Maven学习笔记(七)Maven安装最佳实践
- (ssl1045)P1048 采药(0/1背包)
- HTML5 footer元素
- spring事务
- PAT-B 1047. 编程团体赛(20)
- Swift 闭包传值 反向传值
- Maven实践(七)---仓库
- oracle的job定时执行存储过程例子和job基本知识介绍
- java系列理论----对象与类
- C语言指针导学(4)——分清函数指针和指针函数
- jersey+spring+mybatis+maven框架集成和实现简单的crud
- 蓝桥杯题 位平方和
- Sublime插件:增强篇
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->用户管理模块新增“重置用户密码”功能
- spring每个包的作用