Maven - 存储库


什么是 Maven 存储库?

在 Maven 术语中,存储库是一个目录,其中存储所有项目 jar、库 jar、插件或任何其他项目特定工件,并且 Maven 可以轻松使用它们。

Maven 存储库分为三种类型。下图将给出关于这三种类型的想法。

  • 当地的
  • 中央
  • 偏僻的
存储库结构

本地存储库

Maven 本地存储库是您计算机上的文件夹位置。当您第一次运行任何 Maven 命令时,它就会被创建。

Maven 本地存储库保留项目的所有依赖项(库 jar、插件 jar 等)。当您运行 Maven 构建时,Maven 会自动将所有依赖项 jar 下载到本地存储库中。它有助于避免每次构建项目时引用存储在远程计算机上的依赖项。

Maven 本地存储库默认由 Maven 在%USER_HOME% 目录中创建。要覆盖默认位置,请在 %M2_HOME%\conf 目录下的 Maven settings.xml 文件中提及另一个路径。

<settings xmlns = "http://maven.apache.org/SETTINGS/1.0.0"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://maven.apache.org/SETTINGS/1.0.0 
   http://maven.apache.org/xsd/settings-1.0.0.xsd">
   <localRepository>C:/MyLocalRepository</localRepository>
</settings>

当您运行 Maven 命令时,Maven 会将依赖项下载到您的自定义路径。

中央存储库

Maven中央存储库是Maven社区提供的存储库。它包含了大量常用的库。

当 Maven 在本地存储库中找不到任何依赖项时,它会开始使用以下 URL 在中央存储库中搜索 - https://repo1.maven.org/maven2/

中央存储库的关键概念如下 -

  • 该存储库由 Maven 社区管理。
  • 不需要配置。
  • 它需要访问互联网才能进行搜索。

为了浏览中央 Maven 存储库的内容,Maven 社区提供了一个 URL - https://search.maven.org/#browse。使用该库,开发人员可以搜索中央存储库中的所有可用库。

远程存储库

有时,Maven 在中央存储库中也找不到提到的依赖项。然后它停止构建过程并将错误消息输出到控制台。为了防止这种情况,Maven 提供了远程存储库的概念,它是开发人员自己的自定义存储库,其中包含所需的库或其他项目 jar。

例如,使用下面提到的 POM.xml,Maven 将从同一 pom.xml 中提到的远程存储库下载依赖项(在中央存储库中不可用)。

<project xmlns = "http://maven.apache.org/POM/4.0.0"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.companyname.projectgroup</groupId>
   <artifactId>project</artifactId>
   <version>1.0</version>
   <dependencies>
      <dependency>
         <groupId>com.companyname.common-lib</groupId>
         <artifactId>common-lib</artifactId>
         <version>1.0.0</version>
      </dependency>
   <dependencies>
   <repositories>
      <repository>
         <id>companyname.lib1</id>
         <url>http://download.companyname.org/maven2/lib1</url>
      </repository>
      <repository>
         <id>companyname.lib2</id>
         <url>http://download.companyname.org/maven2/lib2</url>
      </repository>
   </repositories>
</project>

Maven 依赖项搜索顺序

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

  • 步骤 1 - 在本地存储库中搜索依赖项,如果未找到,则转到步骤 2,否则执行进一步处理。

  • 步骤 2 - 在中央存储库中搜索依赖项,如果未找到并且提到了远程存储库,则转到步骤 4。否则将其下载到本地存储库以供将来参考。

  • 步骤 3 - 如果未提及远程存储库,Maven 只会停止处理并抛出错误(无法找到依赖项)。

  • 步骤 4 - 在远程存储库或存储库中搜索依赖项,如果找到,则将其下载到本地存储库以供将来参考。否则,Maven 将停止处理并抛出错误(无法找到依赖项)。