maven中<dependencyManagement>与<dependencies>两个标签的区别

ops/2025/1/12 2:30:02/

在 Maven 的 pom.xml 文件中,<dependencyManagement> 和 <dependencies> 是两个非常重要的标签,但它们的作用和使用场景不同。以下是它们的详细区别:


1. <dependencies> 标签

  • 作用

    • 用于声明项目直接依赖的库(artifacts)。

    • 在 <dependencies> 中声明的依赖会立即生效,Maven 会下载这些依赖并将其添加到项目的类路径中。

  • 使用场景

    • 当你需要在项目中直接使用某个库时,将其添加到 <dependencies> 中。

  • 示例

    <dependencies><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>2.0.7</version></dependency>
    </dependencies>

    运行 HTML

  • 特点

    • 依赖会立即生效。

    • 子模块会继承父模块的 <dependencies> 中的依赖。


2. <dependencyManagement> 标签

  • 作用

    • 用于集中管理依赖的版本和配置,但不会直接引入依赖

    • 在 <dependencyManagement> 中声明的依赖只是定义了依赖的版本和范围,只有在子模块或 <dependencies> 中显式引用时,才会真正引入依赖。

  • 使用场景

    • 在多模块项目中,统一管理依赖的版本。

    • 避免在多个模块中重复定义依赖的版本。

  • 示例

    <dependencyManagement><dependencies><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>2.0.7</version></dependency></dependencies>
    </dependencyManagement>

    运行 HTML

  • 特点

    • 依赖不会立即生效,只有在子模块或 <dependencies> 中引用时才会生效。

    • 子模块会继承父模块的 <dependencyManagement> 中的依赖定义。


3. 主要区别

特性<dependencies><dependencyManagement>
作用直接引入依赖管理依赖的版本和配置,不直接引入依赖
依赖是否立即生效
使用场景项目直接依赖的库多模块项目中统一管理依赖版本
子模块是否继承
是否需要在子模块中引用不需要需要在子模块中显式引用

4. 实际使用示例

父模块的 pom.xml

在父模块中,使用 <dependencyManagement> 统一管理依赖版本:

<project><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>parent-project</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><dependencyManagement><dependencies><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>2.0.7</version></dependency></dependencies></dependencyManagement>
</project>
子模块的 pom.xml

在子模块中,只需引用依赖,不需要指定版本(版本由父模块统一管理):

<project><modelVersion>4.0.0</modelVersion><parent><groupId>com.example</groupId><artifactId>parent-project</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>child-project</artifactId><dependencies><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId></dependency></dependencies>
</project>

5. 总结

  • <dependencies>:用于直接引入依赖,依赖会立即生效。

  • <dependencyManagement>:用于集中管理依赖的版本和配置,依赖不会立即生效,只有在子模块或 <dependencies> 中引用时才会生效。

在多模块项目中,通常使用 <dependencyManagement> 来统一管理依赖版本,避免重复定义和版本冲突。


http://www.ppmy.cn/ops/149321.html

相关文章

2025年01月09日Github流行趋势

1. 项目名称&#xff1a;khoj 项目地址url&#xff1a;https://github.com/khoj-ai/khoj项目语言&#xff1a;Python历史star数&#xff1a;22750今日star数&#xff1a;1272项目维护者&#xff1a;debanjum, sabaimran, MythicalCow, aam-at, eltociear项目简介&#xff1a;你…

python:利用神经网络技术确定大量离散点中纵坐标可信度的最高集中区间

当我们有许多离散点并想要确定纵坐标在某个区间内的可信度时&#xff0c;我们可以使用神经网络模型来解决这个问题。下面是一个使用Python编写的示例代码&#xff0c;展示了如何使用神经网络来确定大量离散点中纵坐标可信度的最高集中区间。 import numpy as np from sklearn.…

Vue2:el-table中的文字根据内容改变颜色

想要实现的效果如图,【级别】和【P】列的颜色根据文字内容变化 1、正常创建表格 <template><el-table:data="tableData"style="width: 100%"><el-table-column prop="id" label="ID"/> <el-table-column …

错误的类文件: *** 类文件具有错误的版本 61.0, 应为 52.0 请删除该文件或确保该文件位于正确的类路径子目录中

一、问题 用maven对一个开源项目打包时&#xff0c;遇到了“错误的类文件: *** 类文件具有错误的版本 61.0, 应为 52.0 请删除该文件或确保该文件位于正确的类路径子目录中。”&#xff1a; 二、原因 原因是当前java环境是Java 8&#xff08;版本52.0&#xff09;&#xff0c;但…

【文件I/O】 总表和分表

在 Linux 系统中&#xff0c;文件操作中涉及的 总表 和 分表 是 文件描述符管理机制中 的两个重要概念。它们分别对应于 系统级别的文件表 和 进程级别的文件表。 总表&#xff08;系统文件表&#xff09; 总表 是 系统级别 的文件表&#xff0c;记录系统中所有打开文件的信息…

Ubuntu 24.04 LTS系统安装Docker踩的坑

一开始我跟着Docker给出的官网文档 Ubuntu | Docker Docs 流程走&#xff0c;倒腾了两个多小时&#xff0c;遇到了各种坑&#xff0c;最后放弃了。在我们使用脚本安装Docker命令前&#xff0c;我们先把已经安装的Docker全部卸载掉。 卸载Docker 1.删除docker及安装时自动安装…

Stable Diffusion本地部署教程(附安装包)

想使用Stable Diffusion需要的环境有哪些呢? python3.10.11(至少也得3.10.6以上):依赖python环境NVIDIA:GPUgit:从github上下载包(可选,由于我已提供安装包,你可以不用git)Stable Diffusion安装包工具包: NVIDIA:https://developer.nvidia.com/cuda-toolkit-archiv…

Spring5框架之SpringMVC

目录 1.SpringMVC的入门案例 1.1 通过maven构建一个web项目 1.2 添加对应的依赖及Tomcat插件 1.3 创建SpringMVC的配置文件 1.4 在web.xml中注册DispatchServlet 1.5 创建自定义的Controller 1.6 在Springmvc配置文件中注册 原理分析&#xff1a; 2.SpringMVC基于注解的…