全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-23 5 分钟 ✍️ juanwangdev

依赖排除与排除策略

exclusions 控制传递依赖,排除不需要或冲突的间接依赖。

exclusions 语法

基本结构

XML
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-core</artifactId>
  <version>5.3.20</version>
  <exclusions>
    <exclusion>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
    </exclusion>
  </exclusions>
</dependency>

exclusion 元素

元素说明
groupId排除依赖的组织标识
artifactId排除依赖的项目名称

exclusion 不需要 version,排除所有版本。

排除场景

场景1:替换日志实现

XML
<!-- Spring 默认使用 commons-logging -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-core</artifactId>
  <version>5.3.20</version>
  <exclusions>
    <!-- 排除 commons-logging -->
    <exclusion>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
    </exclusion>
  </exclusions>
</dependency>

<!-- 使用 slf4j 替代 -->
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>jcl-over-slf4j</artifactId>
  <version>1.7.36</version>
</dependency>

场景2:排除冲突依赖

XML
<dependency>
  <groupId>com.example</groupId>
  <artifactId>module-a</artifactId>
  <version>1.0.0</version>
  <exclusions>
    <!-- 排除冲突的 log4j -->
    <exclusion>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
    </exclusion>
  </exclusions>
</dependency>

场景3:排除多余依赖

XML
<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-core</artifactId>
  <version>5.6.0</version>
  <exclusions>
    <!-- 排除不需要的 JPA API -->
    <exclusion>
      <groupId>javax.persistence</groupId>
      <artifactId>javax.persistence-api</artifactId>
    </exclusion>
  </exclusions>
</dependency>

多个排除

XML
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>5.3.20</version>
  <exclusions>
    <exclusion>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
    </exclusion>
    <exclusion>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
    </exclusion>
  </exclusions>
</dependency>

全局排除策略

在 dependencyManagement 中排除

XML
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>5.3.20</version>
      <exclusions>
        <exclusion>
          <groupId>commons-logging</groupId>
          <artifactId>commons-logging</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
  </dependencies>
</dependencyManagement>

排除 vs 可选依赖

方式说明
exclusions接收方主动排除传递依赖
optional=true提供方声明不传递

optional 示例

XML
<!-- 提供方声明可选,不传递 -->
<dependency>
  <groupId>com.example</groupId>
  <artifactId>optional-lib</artifactId>
  <version>1.0.0</version>
  <optional>true</optional>
</dependency>

验证排除效果

Bash
mvn dependency:tree

检查目标依赖是否已从树中消失。

排除注意事项

注意点

注意说明
不指定版本排除所有版本
可能导致缺失排除后需手动引入替代
作用范围仅对当前依赖声明有效

排除后补充替代

XML
<!-- 排除原依赖 -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-core</artifactId>
  <exclusions>
    <exclusion>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
    </exclusion>
  </exclusions>
</dependency>

<!-- 手动添加替代依赖 -->
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>jcl-over-slf4j</artifactId>
  <version>1.7.36</version>
</dependency>

要点总结

  • exclusions 排除传递依赖,不指定版本
  • 排除后可能需要手动引入替代依赖
  • 常用于替换日志实现、排除冲突库
  • optional=true 在提供方声明不传递
  • 使用 dependency:tree 验证排除效果

📝 发现内容有误?点击此处直接编辑

← 上一篇 依赖声明与坐标引用
下一篇 → 依赖版本冲突解决
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库