参考:https://www.bilibili.com/video/BV1Fz4y167p5
一般地,在 Maven 项目目录下,没有诸如
lib/
这样用来存放依赖文件的目录。当 Maven 在执行编译或测试时,如果需要使用依赖文件,会根据pom.xml
中的坐标来使用本地仓库中的依赖文件。
仓库分类
Maven 仓库分两大类:
- 本地仓库
- 远程仓库
- 中央仓库:默认配置下,Maven 下载 jar 包的地方。
- 私服:为节省带宽和时间,在局域网内架设私有的仓库服务器,用其代理所有外部的远程仓库,内部的项目也可部署到私服上供其他项目使用。
- 其他公共库
当 Maven 根据坐标去寻找“依赖”(jar 包或插件)时,首先会查看本地仓库,如果在本地仓库已经存在,则直接使用(使用速度就很快);如果本地仓库中没有该“依赖”,Maven 就去远程仓库中查找,找到后,下载到本地仓库(觉得慢就是因为存在这个过程),再使用。如果本地仓库和远程仓库中都没发现要查找的“依赖”,Maven 会报错。
本地仓库
默认情况下,本地仓库在每个用户自己的用户目录下的 .m2/repository/
中。
若想修改本地仓库目录的路径,可通过 Maven 配置文件 conf/settings.xml
来指定仓库路径。
<!-- 如果路径中斜杠为 \ ,可能会配置不成功,修改为 / 即可 -->
<settings>
<localRepository>D:/m2/repository</localRepository>
</settings>
远程仓库
远程仓库中有 Maven 的 核心插件 和可供下载的 jar 文件。
中央仓库
原始的本地仓库是空的,Maven 必须至少有一个可用的远程仓库,才能在执行 Maven 命令时下载到需要的“依赖”(jar 包或插件)。中央仓库就是这样一个默认的远程仓库。
Maven 的安装目录下的 lib/
的 maven-model-builder-3.8.3.jar
(并不一定是3.8.3,而是当前下载安装的 maven 版本号)中的 org\apache\maven\model\
下,有个 超级 pom
(如:pom-4.0.0.xml
文件),其中定义了中央仓库的网址。
中央仓库在国外,包含了2000多个开源项目,接收每天1亿次以上的访问,所以使用中央仓库来下载依赖包可能会比较慢。
当第一次运行 Maven 命令时,需要有 Internet 连接,因为它需要从网上(Maven 默认的远程仓库)下载一些文件。
私服
一般是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的 Maven 用户使用。当 Maven 需要下载 “依赖” (jar 包或插件)时,会先从私服中查找,如果私服中没有,才会从外部的远程仓库中下载,并缓存到私服上,再为 Maven 提供。
- 与本地仓库类似,只是私服是一个远程服务器,不是本地而已。
此外,一些无法从外部下载的 “依赖” (如组织内部共享的项目)。
公司内部应建立私服的原因
- 节省自己的外网带宽
- 加速 Maven 构建
- 部署第三方控件
- 提高稳定性
- 降低中央仓库的负荷
私服搭建
私服一般由公司搭建。关于私服搭建,网上另外搜寻教程。
私服配置方式
在 pom.xml
中配置:
<repositories>
<repository>
<snapshots>
<enabled>true</enabled>
</snapshots>
<id>public</id>
<name>Public Repositories</name>
<url>http://192.168.0.96:8081/content/groups/public/</url> <!-- 远程服务器地址-->
</repository>
<repository>
<id>getui-nexus</id>
<url>http://mvn.gt.igexin.com/nexus/content/repositories/releases/</url>
</repository>
</repositories>
其他公共库
常用的阿里云仓库配置
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
很多公司没有搭建自己的私服,都会使用阿里云仓库。阿里云仓库也是从中央仓库中,将 jar 包依赖提前缓存到阿里云仓库中。
依赖编写注意
编写错误
pom.xml
中如果出现某些 “依赖” 被标为红色(在IDEA中),很可能就是下载不成功,下载不成功主要原因:
- 网络问题
- 依赖写错了,本地与远程仓库中都找不到
如何查找并正确引用依赖
依赖放在 pom.xml
中的 <dependencies>
标签中,但如何确定插件(比如说 servlet
)的 groupId
、artifactId
、version
呢?
可以直接在搜索引擎中输入:maven repository
,查找,进入 Maven仓库的网站:
- https://mvnrepository.com/
进入后,比如搜索:servlet
。
在搜索结果中,比如说第一条,点击第一条标题进入,就可以看到各种版本。如何选择版本?可以看看 Usages
这栏,看哪个版本被使用得最多,就选那个版本。
选择版本后,点击进去,就可以看到 Maven 的依赖设置方式。复制并粘贴到你项目的 pom.xml
中即可。