maven 的dependencyManagement和dependency

Maven依赖管理与声明区别

在 Maven 中,dependencyManagementdependency 都用于管理项目依赖,但它们的作用和使用场景有明显区别:

1. dependency(依赖声明)

  • 作用:直接声明项目需要引入的依赖,Maven 会实际下载并添加到项目的类路径中。
  • 特点
    • 声明即引入,会被当前项目及子项目(如果是父 POM)继承
    • 必须指定 groupIdartifactId,通常还需要 version
    • 可以通过 scope 指定依赖范围(如 compiletest 等)
  • 示例
<dependencies>
  <dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>31.1-jre</version>
    <scope>compile</scope>
  </dependency>
</dependencies>

2. dependencyManagement(依赖管理)

  • 作用:声明依赖的版本、范围等信息,但不会实际引入依赖,仅作为依赖版本的管理中心。
  • 特点
    • 仅声明依赖信息,不实际下载依赖
    • 主要用于统一管理项目(尤其是多模块项目)中依赖的版本,避免版本冲突
    • 子项目可以直接引用父项目中 dependencyManagement 声明的依赖,无需指定版本
  • 示例
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
      <version>31.1-jre</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

<!-- 子项目或当前项目中实际引入时,无需指定版本 -->
<dependencies>
  <dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <!-- 版本已在 dependencyManagement 中声明 -->
  </dependency>
</dependencies>

核心区别总结

特性dependencydependencyManagement
实际引入依赖
版本管理单个依赖的版本声明统一管理多个依赖的版本
继承特性子项目会继承依赖子项目可引用但需显式声明
主要用途实际添加项目所需依赖统一控制依赖版本,避免冲突

最佳实践

  • 在多模块项目中,通常在父 POM 的 dependencyManagement 中统一声明所有依赖的版本
  • 子模块通过 dependency 引入所需依赖,无需重复指定版本
  • 这样既能保证项目中依赖版本的一致性,又能灵活控制每个模块实际引入的依赖
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值