Maven 是一个广泛使用的项目构建和依赖管理工具,在 Java 开发生态中占据重要地位。作为 Maven 的核心概念之一,仓库(Repository)扮演着至关重要的角色,用于存储项目的依赖、插件以及构建所需的各种资源。
了解 Maven 仓库的分类和用途,不仅能够帮助开发者有效管理项目依赖,还能提升构建过程的稳定性与效率。本章将系统介绍 Maven 仓库的分类,包括本地仓库、远程仓库和中央仓库,以及它们之间的协作关系。这为您在实际开发中优化依赖管理策略、提高开发效率提供坚实的理论基础。
无论您是初学者还是有经验的开发者,希望这部分内容能够为您在 Maven 的使用中提供清晰的指引。
文章目录
- 1、Maven 的仓库分类
- 2、本地仓库
- 3、远程仓库
1、Maven 的仓库分类
Maven 仓库的类型一般可以分为 2 种:即本地仓库、远程仓库。
2、本地仓库
本地仓库(Local),是存在于本地的一个仓库,它用来缓存下载的依赖包。运行 Maven 的时候,Maven 所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。
Maven 的本地仓库,在安装 Maven 后并不会创建,它是在第一次执行 maven
命令的时候才被创建。默认情况下,不管 Linux 还是 Windows,每个用户在自己的用户目录下都有一个路径名为 .m2/respository/
的仓库目录。
Maven 本地仓库默认被创建在 %USER_HOME%
目录下。要修改默认位置,可以在 %M2_HOME%\conf
目录中的 Maven 的 settings.xml
文件中定义新路径。
<!-- interactiveMode| This will determine whether maven prompts you when it needs input. If set to false,| maven will use a sensible default value, perhaps based on some other setting, for| the parameter in question.|| Default: true<interactiveMode>true</interactiveMode>--><localRepository>~/.m2/repository</localRepository>
3、远程仓库
远程仓库(Remote),如其名字所述,其实位于远程服务器的一个仓库。它是开发人员自己定制仓库(一般公司会自己定制一个远程仓库),包含了所需要的代码库或者其他工程中用到的 .jar
文件。
Maven 的远程仓库,一般可以在项目 POM 文件的 repositories
标签中定义,或者也可以在项目 POM 文件中的 profiles/profile/repositories
标签以及 conf/setting.xml
文件中的 profiles/profile/repositories
标签中定义。
在网上其他资料中,还会提到 Maven 仓库有另一个类型 —— 中央仓库(Central),它其实是一个特殊的远程仓库。Maven 中央仓库是由 Maven 社区提供的仓库,绝大多数流行的开源 Java 构件,以及源码、作者信息、SCM、信息、许可证信息等。一般来说,简单的 Java 项目依赖的构件都可以在这里下载到。另外一个特殊之处在于,中央仓库的地址是内置在 Maven 源码中的,即默认会向中央仓库拉取依赖。
Maven 仓库的查找顺序:Local Repository
> settings_profile_repo
> pom_profile_repo (子)
> pom_repositories (子)
> parent_pom_profile_repo (父)
> parent_pom_repositories (父)
> settings_mirror
> Central Repository
此外,Maven 中还会有一个镜像仓库的概念,它由 conf/setting.xml
文件中的 mirrors
标签定义。其相当于一个拦截器,当镜像仓库mirror/mirrorOf
值与远程仓库 repository/id
相同时,远程仓库会被拦截,转而使用镜像仓库地址地址。只有镜像仓库找不到依赖时,Maven 才会回退并访问被代理的仓库。
配置范例如下:
<!--使用私有仓库替换 Maven 默认的中央仓库 -->
<mirrors><mirror><!--镜像的唯一标识,在 mirror 标签中,其实没啥用 --><id>aliyun</id> <!--仓库描述 --><name>xx公司私有仓库地址</name> <!--私有仓库地址,这个很重要不能错--><url>http://maven.aliyun.com/nexus/content/groups/public/</url><!--`central` 为 Maven 中央仓库的标识,替换 Maven 源码内默认的是中央仓库地址--><mirrorOf>central</mirrorOf></mirror>
</mirrors>
如上图配置所示,Maven 会用 http://maven.aliyun.com/nexus/content/groups/public/
这个仓库镜像替换 Maven 中央仓库,其中 central
是 Maven 中央仓库的 ID 标识。我们经常说用阿里云的 Maven 仓库可以提速,其实就是使用这种方法实现的。