Maven仓库

更新于:2020-11-16     浏览:2322 次  

在 Maven 的术语中,仓库是一个位置。软件开发中不可避免的需要引入大量的第三方库,这些库所在的位置在Maven中被称为 "仓库" 。 在 Maven 中任何一个依赖、插件或者项目构建的输出,都可以称之为 "构件" 。Maven 仓库能帮助我们管理构件(主要是JAR)。


Maven 仓库有三种类型:

  • 本地仓库(local):顾名思义就是本地本机放置构件的地方。Maven 从远程仓库下载下来的构件都存放在本地仓库中,项目可以从本地 Maven 仓库中获取自己所依赖的文件。
  • 中央仓库(central):Maven 中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库。中央仓库是 Maven 官方提供的,可通过 http://search.maven.org/ 来访问。
  • 远程私服(remote):私服一般是指公司内部使用的仓库。运行 Maven 时,Maven 所需要的任何构件都是从本地仓库获取的,但是如果本地仓库没有,它就会尝试从远程仓库中下载构件到本地仓库。如果 Maven 无法连接到远程仓库,将无法正常构建项目。

Maven仓库原理介绍

使用 Maven 给我们带来的最直接的好处就是统一管理 Jar 包。那么这些 Jar 包存放在哪里呢?它们就在你的本地仓库中,默认地址位于 C:\Users\用户名\.m2 目录下(当然也可以修改这个默认地址)。


实际上,我们可以将本地仓库理解为 "缓存",目的是存放 Jar 包。开发项目时首先会从本地仓库中获取 Jar 包,当无法获取指定 Jar 包的时候,本地仓库会从远程仓库(或中央仓库)中下载 Jar 包,并 "缓存" 到本地仓库中以备将来使用。这样一来,本地仓库会随着项目的积累越变越大。


通过下面这张图可以清晰地表达项目、本地仓库、远程仓库之间的关系。


Maven仓库介绍

本地仓库

Maven 的本地仓库,在安装 Maven 后并不会创建,它是在第一次执行 Maven 命令的时候才被创建。


运行 Maven 的时候,Maven 所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。


默认情况下,不管 Linux 还是 Windows,每个用户在自己的用户目录下都有一个路径名为 .m2/respository/ 的仓库目录。


Maven 本地仓库默认被创建在 %USER_HOME% 目录下。要修改默认位置,在 %M2_HOME%\conf 目录中的 Maven 的 settings.xml 文件中定义另一个路径。如下所示:

<settings>
      <localRepository>C:/mywork/local-repository</localRepository>
</settings>

当你运行 Maven 命令,Maven 将下载依赖的文件到你指定的路径中。


中央仓库

Maven 中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库。


中央仓库包含了绝大多数流行的开源Java构件,以及源码、作者信息、SCM、信息、许可证信息等。一般来说,简单的Java项目依赖的构件都可以在这里下载到。


中央仓库由 Maven 社区管理,不需要配置,但需要通过网络才能访问。

远程私服仓库

如果 Maven 在中央仓库中也找不到依赖的文件,它会停止构建过程并输出错误信息到控制台。为避免这种情况,Maven 提供了远程仓库的概念,它是开发人员自己定制仓库,包含了所需要的代码库或者其他工程中用到的 Jar 文件。

Maven 依赖搜索顺序

当我们执行 Maven 构建命令时,Maven 开始按照以下顺序查找依赖的库:


  • 步骤 1 - 在本地仓库中搜索,如果找不到,执行步骤 2,如果找到了则执行其他操作。
  • 步骤 2 - 在中央仓库中搜索,如果找不到,并且有一个或多个远程仓库已经设置,则执行步骤 4,如果找到了则下载到本地仓库中以备将来引用。
  • 步骤 3 - 如果远程仓库没有被设置,Maven 将简单的停滞处理并抛出错误(无法找到依赖的文件)。
  • 步骤 4 - 在一个或多个远程仓库中搜索依赖的文件,如果找到则下载到本地仓库以备将来引用,否则 Maven 将停止处理并抛出错误(无法找到依赖的文件)。

修改配置

Maven会将下载的类库(Jar 包)放置到本地的一个目录下,如果想重新定义这个目录的位置就需要修改 Maven 本地仓库的配置。 需要修改文件:E:\maven\apache-maven-3.6.0\conf\setting.xml,如下所示:

<settings>
  <!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   | Default: ${user.home}/.m2/repository 默认存放地址
    -->
  <localRepository>E:\maven\repository</localRepository>
</settings>

依据该配置,Maven 就会将下载的类库保存到 E:\maven\repository 中。


验证一下我们刚才做的事情是否产生作用,请在控制台中输入:

mvn help:system

结果如下图所示效果:




如果没有任何问题,执行完该命令之后,在 E:\maven\repository 下面就会多出很多文件,这些文件就是 Maven 从中央仓库下载到本地仓库的文件,Maven 已经开始为我们工作了。