Maven 简明教程

Maven - Repositories

What is a Maven Repository?

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

Maven 存储库有三种类型。以下说明将介绍这三种类型的相关概念。

  1. local

  2. central

  3. remote

repository structure

Local Repository

Maven 本地存储库是计算机上的一个文件夹位置。首次运行任何 maven 命令时将创建它。

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

默认情况下,Maven会在 %USER_HOME% 目录中创建 Maven 本地存储库。要覆盖默认位置,请在 %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 会将依赖项下载到自定义路径。

Central Repository

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

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

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

  1. 此存储库由 Maven 社区管理。

  2. 无需进行配置。

  3. 需要互联网访问才能进行搜索。

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

Remote Repository

有时,Maven 也找不到中央存储库中提到的依赖项。然后它会停止构建过程,并向控制台输出错误消息。为了防止这种情况,Maven 提供了 Remote Repository 的概念,它是开发人员自己的自定义存储库,其中包含所需的库或其他项目 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 Dependency Search Sequence

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

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

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

  3. Step 3 − 如果没有提过远程存储库,Maven 会直接停止处理并抛出错误(无法找到依赖项)。

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