欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > maven中<dependencyManagement>与<dependencies>两个标签的区别

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

2025/9/22 2:28:55 来源:https://blog.csdn.net/zhglhy/article/details/144969132  浏览:    关键词:maven中<dependencyManagement>与<dependencies>两个标签的区别

在 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> 来统一管理依赖版本,避免重复定义和版本冲突。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词