Maven如何自动解决jar库的依赖性。


出版日期:

更新:


INFORMATION > Maven如何自动解决jar库的依赖性。

2026 状态和安全使用

结论: Maven 不会通过文件名发现任意 JAR。它解析声明的坐标,下载工件 POM,遵循 POM 的依赖关系,应用范围和可选规则,并在多个路径请求不同版本时使用依赖关系中介。

你将学到什么

  • 本地、中央、镜像和私有存储库如何参与解析。
  • 为什么依赖项的 POM(而不是 JAR 本身)描述了大多数传递性需求。
  • 如何在覆盖版本之前检查有效图表。

这适用于谁:想要了解下载的工件来自何处以及为什么会出现额外库的 Maven 用户。

2026 年位置:下面的旧 Apache POI 坐标仍然可以作为历史示例,而不是版本推荐。使用当前支持的依赖项、受信任的 HTTPS 存储库、可用的校验和/签名控制以及依赖项更新策略。

安全注意事项:原始文章中的命令和配置示例尚未在当前生产环境中重新运行。应用之前,请在单独的测试环境中验证支持的版本、备份、访问控制和回滚步骤。

官方主要来源

概述。

Maven会自动从互联网上下载罐子,但我想解释一下它到底是如何工作的。

本文的前提是,你需要了解什么是Maven,所以如果你对Maven本身不熟悉,也应该参考以下文章。

什么是Maven,Maven是做什么的?

目录

  1. Maven解决jar库依赖关系的能力。
  2. 摘要

1. Maven解决jar库依赖关系的能力。

只需在pom.xml文件中定义所需的jar文件,Maven就能自动检索jar文件。 它还会自动学习运行该jar所需的依赖性jar。 我想解释一下它是如何工作的。

1-1. 在pom.xml文件中应包括什么。

首先,为了解决jar库的依赖性,在pom.xml文件中提供了信息。 Maven处理来自pom.xml文件的信息。 例如,如果需要 "poi-3.17.jar",它在 pom.xml 中的描述如下。 (顺便说一下,'poi-3.17.jar'是一个用于操作微软Office文件(如Excel)的jar。)

pom.xml


<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.17</version>
</dependency>

只需提及上述内容,就可以从互联网上下载 "poi-3.17.jar",同时从互联网上下载运行 "poi-3.17.jar "所需的配套jar。

1-2. 它们是如何从网上下载的?

对该系统的简单解释如下图所示。

Maven Repository。

从互联网上的Maven仓库下载。 如果没有设置,默认值是中央存储库。 网址如下。

https://repo1.maven.org/maven2/

如果你有兴趣,请参见以下网站,了解互联网上的资料库清单。

https://mvnrepository.com/repos

第一次,从外部资源库获取jar,但它被复制到本地资源库,从第二次开始就不被获取了。 本地资源库的位置是 "C:\Users\user\.m2"。

如果你想改变默认值的目的地,你也可以通过在pom.xml中包含以下版本库标签来改变目的地。

pom.xml


<repositories>
    <repository>
        <id>sonatype-nexus-snapshots</id>
        <name>Sonatype Nexus Snapshots</name>
        <url>https://oss.sonatype.org/content/repositories/snapshots</url>
        <releases>
            <enabled>false</enabled>
        </releases>
        <snapshots>
        </snapshots>
    </repository>
</repositories>

1-3. 解决要获得的罐子的依赖性的机制。

我们刚刚描述了一个获得'poi-3.17.jar'的例子,但是'poi-3.17.jar'需要'commons-collections4-4.1.jar'才能运行。 这意味着'poi-3.17.jar'依赖于'commons-collections4-4.1.jar'。 解决这一依赖关系的机制可以在存放'poi-3.17.jar'的Maven仓库中找到。 网址如下。

https://repo1.maven.org/maven2/org/apache/poi/poi/3.17/

我认为 "poi-3.17.pom "被存储了,在这个文件中你会发现 "poi-3.17.jar "依赖于 "commons-collections4-4.1.jar "的信息。 这意味着当检索'poi-3.17.jar'时,系统不仅检索jar文件,还检索pom文件并检查其他必要的jar文件。

2. 摘要

Maven解决jar库依赖关系的机制是,在存放要检索的jar文件的pom文件中定义依赖关系。

谢谢你一直看到最后。