《Maven实战》---仓库
1. 仓库的布局
任何一个构件都有其唯一的标示,根据这个标示可以定义仓库中唯一的存储路径,这便是maven仓库的布局方式
该路径与坐标对于的大致关系为:groupId/artifactId/version/artifactId-version.packaging
例子:log4j/log4j/1.2.15/log4j-1.2.15.jar
2. 仓库的分类
对于maven来说仓库只分两类:本地仓库和远程仓库
当maven根据坐标寻找构件的时候,它首先会看本地仓库,如果本地仓库存在此构件,则直接使用,如果不存在此构件,或者需要查看是否有更新的构件版本,maven就会去远程仓库查找,发现后下载到本地仓库
在此基础上,有些特殊的远程仓库,中央仓库是自带的远程仓库,私服是特殊的远程仓库,节省带宽和时间,其他公共库
2.1. 本地仓库
自定义本地仓库的地址
<localRepository>xxxxx\repository\</localRepository>
只有一个构件在本地仓库了,才能被其他项目使用,那么构件如何进入到本地仓库?
mvn clean install
2.2. 远程仓库
安装好maven后,执行第一条maven命令才会创建本地仓库,然后根据配置和需要,从远程仓库下载构件至本地仓库
本地仓库只能有一个,但是可以配置访问很多远程仓库
2.3. 中央仓库
maven的安装文件自带了中央仓库的配置$M2_HOME/lib/maven-model-builder.jar
配置
|
这是所有的maven项目都会继承的超级pom,使用<id>作为对中央仓库的唯一标识
2.4. 私服
私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库。
优点:
- 节省自己的外网带宽
- 加速maven的构件,不停的请求连接外部仓库十分耗时,快照检查更新要求maven执行构建过程中不停检查远程仓库
- 部署第三方构件,公司内部的构件可以放这里
- 提高稳定性,增强控制,没网的时候,可以直接从这里拿
- 降低中央仓库的负荷
3. 远程仓库的配置和认证
配置
|
配置
|
大部分仓库不需要认证就能访问,但是有时候出去安全考虑需要提供认证信息才能访问一些远程仓库
配置认证和配置仓库不同,仓库可以放在pom中,配置认证必须放在settings中
4. 部署到远程仓库
配置
|
往仓库部署构件的时候,往往需要认证,就是在settings上创建个server元素
配置对应的远程仓库,如果项目版本上快照版本,则部署到快照仓库,否则部署在发布版本仓库
mvn clean deploy
5. 快照版本
快照版本为version 后加上SNAPSHOT的版本,这种版本发布过程中,maven会自动为构件打上时间戳,有了时间戳maven随时都能找到最新的构件
默认上一天检查一次更新,用户也可以-U强制更新
快照版本的出现,是为了让其他人能每次拉版本能拉最新版本,自动的获取最新,不然的话,在maven得改version才能变好坐标位置,本质上就是把开发要加的version变化交个了maven帮我们自动化
快照版本其本质上开发过程中,还未稳定的构件,可能有bug,或者需求变化,经过完善测试后,删除快照,变为稳定版本发布,将不带有时间戳
6. 镜像
如果说X可以提供Y存储的所有内容,那么就可以认为X说Y的一个镜像
配置
|
表示,Jboss的仓库的请求都会被转发到http://192.106.2.1 这里
镜像也支持认证,同理配置个server即可
<mirrorOf>*</mirrorOf> 匹配所有的远程仓库
<mirrorOf>repo1,repo2</mirrorOf> 匹配仓库repo1,repo2
<mirrorOf>*,!repo1</mirrorOf> 匹配所有远程,除了repo1
<mirrorOf>external:*</mirrorOf> 匹配所有的远程仓库,匹配所有的远程仓库,使用localhost,file协议的除外,也就是所有不在本机的远程仓库