📜  Maven-外部依赖关系(1)

📅  最后修改于: 2023-12-03 15:17:35.847000             🧑  作者: Mango

Maven 外部依赖关系

简介

Maven 是一款常用的构建工具,常常用于 Java 项目的构建与管理。 Maven 的依赖管理功能,是它最为突出和强大的功能之一。在 Maven 中引入外部依赖是非常方便的,并且 Maven 会自动处理这些依赖的传递关系。在这里,我们将详细介绍 Maven 的外部依赖关系。

配置依赖

在 Maven 的 pom.xml 文件中,我们可以通过 <dependency> 标签来配置项目的依赖。

下面是一个简单的例子,引入一个 Commons Lang3 的依赖:

<dependencies>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.12.0</version>
    </dependency>
</dependencies>

以上的依赖说明:

  • groupId:依赖的组织名;在 Maven 官方仓库中,所有的库都是以它们的 groupId 进行分类的(相当于包名)。
  • artifactId:依赖的库名
  • version:依赖的版本
依赖传递

当我们在项目中引入一个外部依赖之后,这个依赖可能还依赖其它的库。 Maven 会自动去解析这些依赖,并将它们下载到本地仓库中。

例如,你在项目中引入了 Spring Framework 的依赖,Maven 依赖管理器将自动下载所有 Spring Framework 所依赖的库,这些都是通过 Maven 的传递性来自动处理的。

依赖范围

在 Maven 中,依赖有不同的范围,它们决定了该依赖对应用的哪个部分可见。下面是 Maven 支持的依赖范围:

  • compile: 缺省值,表示该依赖在编译、测试、运行时都需要。
  • provided: 编译和测试时需要,但运行时由 JDK 或容器提供。
  • runtime: 运行时需要,但编译和测试不需要。
  • test: 仅测试需要,编译和运行时不需要。
  • system: 手动定义依赖的路径,Maven 不会在本地仓库或远程仓库中查找该依赖。

例如,我们使用下面的例子来指定一个 log4j 的依赖:

<dependencies>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

以上依赖将只在编译和测试时使用,但在运行时将由容器提供。

排除依赖

有些情况下,我们可能需要排除某个依赖。例如,假设你在项目中使用了 Spring Framework,而这个框架依赖了 Commons Logging,但是你想使用 Log4j 做记录日志,则需要将 Commons Logging 排除掉。可以使用 <exclusions> 标签完成这一操作。

例如:

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>5.3.12.RELEASE</version>
        <exclusions>
            <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

以上,我们在 Spring Core 模块中排除了 Commons Logging 这个库。

总结

本文简要介绍了 Maven 的外部依赖关系,包括配置依赖、依赖传递、依赖范围以及排除依赖等。 Maven 构建工具提供了卓越的外部依赖管理能力,可以简化程序员的开发工作,提高其效率。