实习这么久,你知道Maven是如何从代码仓库中找到需要的依赖吗?
目录
碎碎念
Maven是如何找到代码仓库里需要的依赖的?
如何根据坐标在本地仓库中寻找所需要的依赖?
如何根据坐标在远程仓库中寻找所需要的依赖?
Maven 如何使用 HTTP 或 HTTPS 协议从远程仓库中获取依赖项,请详细解释其原理
碎碎念
昨晚跟mentor沟通,mentor问了我一个很基础,但是我确实没有往这方面思考🤔,隐约知道有个本地仓库和远程仓库,但是问原理我就不知道了;
所以有了这篇文章,用来学习;接下来请看,四连问!
Maven是如何找到代码仓库里需要的依赖的?
- 在 Maven 中,要查找并获取项目所需的依赖项,需要配置 Maven 仓库和仓库中的依赖项信息。
- Maven 仓库是一个包含 Maven 构件和其它依赖项的集合,可以从其中获取所需的依赖项。Maven 仓库分为本地仓库和远程仓库。
- 本地仓库:
- 是 Maven 在本地计算机上的一个文件夹,用于存储本地构建和下载的依赖项。在 Maven 的 settings.xml 文件中配置本地仓库的位置。
- 远程仓库:
- 是存储在远程服务器上的 Maven 仓库,用于获取项目所需的依赖项。在 Maven 的 settings.xml 文件中配置远程仓库的位置和访问凭据(如果需要验证)。
- 在 Maven 项目中,需要在 POM 文件中指定所需的依赖项。Maven 根据这些依赖项的坐标(groupId、artifactId、version 和 packaging)在本地仓库和远程仓库中查找依赖项。
- Maven 首先在本地仓库中查找依赖项,如果没有找到,则从远程仓库中下载依赖项,并将其缓存到本地仓库中以便以后使用。
- 如果 Maven 无法连接到远程仓库,或者在远程仓库中无法找到所需的依赖项,则 Maven 构建过程将失败。因此,确保正确配置 Maven 仓库非常重要,以确保项目能够成功构建并运行。
如何根据坐标在本地仓库中寻找所需要的依赖?
- 在本地仓库中查找依赖项,可以按照以下步骤进行:
- 找到本地仓库的位置:
- Maven 默认将本地仓库存储在用户主目录下的 .m2 文件夹中。在这个文件夹下,有一个名为 repository 的子文件夹,用于存储所有已经下载的依赖项。
- 例如,如果 Maven 默认的本地仓库路径为 C:\Users\UserName\.m2\repository,则所有已下载的依赖项都存储在 C:\Users\UserName\.m2\repository 目录下。
- 根据坐标找到依赖项的路径:
- 在本地仓库中,每个依赖项都被存储在一个以其坐标命名的文件夹中。具体而言,依赖项的路径包括以下几个部分:
- groupId:依赖项的 Group ID
- artifactId:依赖项的 Artifact ID
- version:依赖项的版本号
- packaging:依赖项的打包方式
- 例如,对于 JUnit 4.12,其在本地仓库中的路径为:
- C:\Users\UserName\.m2\repository\junit\junit\4.12\junit-4.12.jar
- 其中,junit 是 Group ID,junit 是 Artifact ID,4.12 是版本号,.jar 是打包方式。
- 在本地仓库中查找依赖项:
- 根据依赖项的坐标,在本地仓库中查找该依赖项。具体而言,可以在本地仓库的路径下,查找与该依赖项坐标对应的文件夹或文件。
- 如果在本地仓库中找到了该依赖项,那么 Maven 就可以直接使用该依赖项,而无需再次下载。
- 如果在本地仓库中没有找到该依赖项,那么 Maven 就会尝试从远程仓库中下载该依赖项,并将其保存到本地仓库中,以备将来使用。
- 综上所述:
- 根据坐标在本地仓库中寻找所需要的依赖,需要知道本地仓库的位置以及依赖项的路径构造方式,并在本地仓库中查找与该依赖项坐标对应的文件夹或文件。
如何根据坐标在远程仓库中寻找所需要的依赖?
- 在 Maven 中,根据坐标在远程仓库中寻找所需要的依赖项的过程涉及到一系列协议和约定,其中最常用的协议是 HTTP 或 HTTPS。
- 在 Maven 中,远程仓库可以使用多种协议进行访问,例如 HTTP、HTTPS、FTP 等。默认情况下,Maven 使用 HTTP 或 HTTPS 协议从远程仓库中获取依赖项。通过配置 Maven 的 settings.xml 文件,可以指定所需的远程仓库的位置和其他信息,例如 URL、用户名和密码等。
- 在使用 Maven 时,当指定了一个依赖项的坐标时,Maven 会根据这个坐标的信息来构造一个特定的 URL,然后使用 HTTP 或 HTTPS 协议请求这个 URL,以在远程仓库中查找所需的依赖项。如果依赖项存在于远程仓库中,Maven 将下载这个依赖项并保存到本地仓库中。
- 需要注意的是,Maven 在查找依赖项时会按照特定的顺序搜索本地仓库和远程仓库。具体而言,它首先搜索本地仓库,然后按照 settings.xml 文件中指定的顺序搜索远程仓库,直到找到所需的依赖项为止。如果 Maven 找不到所需的依赖项,则构建过程将失败。
- 关于如何配置 Maven 的 settings.xml 文件来指定远程仓库的位置和其他信息,可以参考 Maven 官方文档中的说明。
Maven 如何使用 HTTP 或 HTTPS 协议从远程仓库中获取依赖项,请详细解释其原理
- Maven 使用 HTTP 或 HTTPS 协议从远程仓库中获取依赖项的过程,涉及到以下几个步骤:
- 构造依赖项的坐标:
- 在 Maven 项目的 POM 文件中,需要指定所需的依赖项,包括其 groupId、artifactId、version 和 packaging 等信息。Maven 根据这些信息构造出一个唯一的坐标,用于标识该依赖项。
- 例如,以下是一个用于指定 JUnit 依赖项的 POM 片段:
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.12</version>
- <scope>test</scope>
- </dependency>
- 其中,JUnit 的坐标为:junit:junit:4.12
- 构造依赖项在远程仓库中的 URL:
- Maven 使用依赖项的坐标,构造出依赖项在远程仓库中的 URL。具体而言,Maven 根据坐标信息,构造出如下格式的 URL:
- http(s)://<repo-url>/<groupId>/<artifactId>/<version>/<artifactId>-<version>.<packaging>
- 例如,对于 JUnit 4.12,Maven 构造出的 URL 为:
- https://repo.maven.apache.org/maven2/junit/junit/4.12/junit-4.12.jar
- Maven 使用依赖项的坐标,构造出依赖项在远程仓库中的 URL。具体而言,Maven 根据坐标信息,构造出如下格式的 URL:
- 发送 HTTP(S) 请求获取依赖项:
- Maven 使用构造出的 URL,向远程仓库发送 HTTP(S) 请求,以获取依赖项的内容。具体而言,Maven 会向远程仓库发送 GET 请求,请求该 URL 对应的资源。
- 如果远程仓库中存在该依赖项,并且 Maven 有权访问该资源,则远程仓库会返回该依赖项的内容,以响应 Maven 的请求。
- 将依赖项保存到本地仓库:
- 一旦 Maven 获取了依赖项的内容,它将把该依赖项保存到本地仓库中。Maven 会将该依赖项的内容保存到本地仓库的对应位置,以备将来使用。
- 如果 Maven 在本地仓库中已经存在该依赖项,则不会再次从远程仓库中获取该依赖项。相反,Maven 会直接从本地仓库中读取该依赖项的内容,并将其用于项目构建。
- 综上所述,Maven 使用 HTTP 或 HTTPS 协议从远程仓库中获取依赖项的过程,包括构造依赖项的坐标、构造依赖项在远程仓库中的 URL、发送 HTTP(S) 请求获取依赖项,以及将依赖项保存到本地仓库等多个步骤。