第7章 仓库

第7章 仓库

本章介绍了maven的仓库概念,仓库分类等内容。

7.1 何为maven仓库

maven仓库就是放置所有jar文件(war,zip,pom等等)的地方,maven项目可以从maven仓库中获取自己所需要的依赖jar。此外,仓库中的构件都有自己的坐标,坐标描述了版本、打包方式和maven如何找到此构件。

7.2 仓库的分类

7.2.1 本地仓库

在第一章安装maven时,我们已经设置了maven本地仓库,那么现在,详细说一说为什么要设置本地仓库。
在maven项目中,是没有lib目录来存放依赖文件的,如果pom.xml中需要依赖,在编译或测试时,maven会自动基于坐标使用本地仓库的依赖文件。
默认情况,maven本地仓库位置在用户根目录的.m2文件夹中。
某些情况下,例如c盘不足,我们需要设置仓库位置。

7.2.1.1 Linux设置方法

找到已注释掉的
<localRepository>/path/to/local/repo</localRepository>,解开注释;
修改内容为:
<localRepository>/usr/local/maven/repo</localRepository>
当然,路径你可以自己定义。

Alt text

7.2.1.2 Window设置方法

找到已注释掉的
<localRepository>/path/to/local/repo</localRepository>

解开注释,修改内容为:

<localRepository> D:/repository </localRepository>

当然,路径你可以自己定义。

Alt text


一个maven构件,只有在本地仓库中时,才能供其他maven项目使用。maven一般会自动从中央仓库下载至本地仓库中。
自建的项目需要安装至本地仓库,才能供其他maven项目调用。
安装至本地仓库命令:mvn clean install

7.2.2 远程仓库

远程仓库可以看做和中央仓库相似,他的构件基本上都是从中央仓库克隆来的,还有些是自己发布的构件。那为什么要远程仓库?有时,国内的网络访问中央仓库很慢,这时可以修改maven配置来访问速度更快的远程仓库来下载构件。

7.2.2.1 远程仓库配置

在pom.xml文件中,标签管理远程仓库。

常见的远程仓库地址:
开源中国:http://maven.oschina.net/content/groups/public/

配置pom链接远程仓库:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!-- 远程仓库配置 -->
<repositories>
<repository>
<id>oschina</id>
<name>oschina repo</name>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<url>http://maven.oschina.net/content/groups/public/</url>
</repository>
</repositories>
标签 介绍
id 标识仓库的唯一值,central会覆盖中央仓库
name 仓库名称
releases true表示开启仓库发布版本下载,false表示禁止
snapshots false表示禁止快照版本下载,true表示支持
url 仓库地址,基于http协议
updatePolicy 远程仓库的检查频率:never-从不检查,always-每次构建都检查,interval:x-每x分钟检查,daily-每天检查
checksumPolicy 检查检验和文件的策略:ignore-不检查,warn-校验错误警告,fail-校验错误构建失败

7.2.3 中央仓库

当maven刚安装至系统中时,本地仓库是空的,maven至少需要一个可用的远程仓库来下载构件,才能执行maven命令。中央仓库就是这样一个远程仓库。
maven默认的远程仓库地址是:http://repo1.maven.org/maven2/

7.2.4 私服

私服是一种特殊的远程仓库,他架设在局域网内或公司内网,负责代理公网上的远程仓库。
maven构建项目时,本地仓库没有所需构件,先请求私服,如果私服上不存在,则从外部的远程仓库下载构件缓存至私服上,供用户使用。
私服的好处:

  • 加速maven构件下载,私服一般会搭建在公司内部局域网中,这样maven的构件下载速度可以比公网下载快很多。
  • 部署第三方构件,当有些构件不能从远程仓库下载,或者某些自己内部开发出的构件,都可以部署至私服上,供用户使用。
  • 降低中央仓库负荷,使用私服可以避免对中央仓库的重复下载。