程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • 依赖管理 - Maven

    • Maven 安装配置
    • Maven 仓库解析
    • Maven 项目构建
    • Maven 依赖管理
    • 手动安装Maven依赖
    • Maven 聚合
    • Maven 继承
    • Maven 属性
    • Maven 版本与测试
    • Maven 资源与多环境配置
    • Maven 生命周期与插件
    • 本地搭建Maven私服
    • Docker搭建Maven私服
    • Maven 上传中央仓库
    • Maven 依赖排除插件
      • Maven Helper 是什么?
      • Maven Helper 的核心功能
      • Dependency Analyzer
      • Dependency Analyzer的核心功能
      • IDEA 的冲突处理能力
  • 开发管理 - Git

  • Git小乌龟教程

  • 代码管理
  • 依赖管理 - Maven
scholar
2024-08-20
目录

Maven 依赖排除插件

# Maven 依赖排除插件

  • Maven Helper 是什么?
  • Maven Helper 的核心功能
  • Dependency Analyzer
  • Dependency Analyzer的核心功能
  • IDEA 的冲突处理能力

前言

在使用 IntelliJ IDEA 进行 Java 项目开发时,Maven Helper 一直以来都是一个非常受欢迎的插件。它提供了通过 UI 界面查看和管理 Maven 依赖关系的功能,使得处理依赖冲突更加直观且高效。下面我们详细探讨下 Maven Helper 的功能及其在 IDEA 2022.1 发布后的发展变化。


# Maven Helper 是什么?

Maven Helper 是一个为 IntelliJ IDEA 提供的插件,它允许开发者通过图形化界面来分析和管理 Maven 项目的依赖关系。由于 Maven 是 Java 项目中最常用的构建工具,因此 Maven Helper 几乎是一个必装插件。从插件的评分来看,它是评分最高的插件之一,功能非常优秀。

在这里插入图片描述


# Maven Helper 的核心功能

  1. 依赖分析与冲突解决

    安装好插件后,在打开 pom.xml 文件时,你会在左下角看到多了一个 Dependency Analyzer 选项:

    在这里插入图片描述

    点击这个选项即可进入 Maven Helper 的功能界面,其中红色的 jar 包表示未被使用:

    在这里插入图片描述

    如上图所示,commons-lang 和 jackson-core 存在依赖冲突。以 jackson-core 为例,来解释冲突原因及为什么最终仲裁为 2.9.9 版本:

    • 原因:此依赖存在多个路径,且版本号不一致。

      1. pom.xml 中直接引入的版本号为 2.9.9: 在这里插入图片描述
      2. 通过 jackson-databind 间接引入的版本号为 2.11.3(jackson-databind 的版本号为 2.9.9): 在这里插入图片描述
      • 解释:由于直接依赖的路径长度为 1,而通过 jackson-databind 间接依赖的路径长度为 2,因此根据路径最短者优先的原则,最终仲裁出版本号为 2.9.9。
    • 解决冲突:如果你想让 2.11.3 版本生效,或者避免所有冲突,使用 exclude 功能是一个不错的选择。在 Maven Helper 中,你可以通过右键操作轻松排除依赖: 在这里插入图片描述

      点击 Exclude 后的效果如下: 在这里插入图片描述

      插件会自动帮你添加 exclusion 部分。刷新视图后,你会看到冲突已经被完美解决: 在这里插入图片描述

  2. 查询某个 jar 的来源

    例如,你想查看 neo4j-java-driver 是通过什么途径被引入的,可以使用如下方式查看:

    下载 (1)

  3. 快速执行 Maven 命令

    尽管 IDEA 提供的 Maven 视图已经很好用,但 Maven Helper 依然可以让你通过图形界面快速执行常用命令:

    在这里插入图片描述

    其他功能如展示依赖关系图、在当前位置快速启动命令行等在实用性上略逊一筹,这里就不再赘述。


# Dependency Analyzer

2022 年 4 月 26 日,JetBrains 发布了 IntelliJ IDEA 2022.1,这是一个大版本更新,其中最受关注的功能之一就是新增了 Dependency Analyzer,用于图形化管理依赖和解决冲突。

# Dependency Analyzer的核心功能

打开 IDEA 的 Maven 视图,点击依赖分析按钮,即可进入依赖分析窗口:

在这里插入图片描述

这个窗口顶部有多个选项,逐一说明如下:

  1. 选择 Maven 模块:适用于多模块项目,可按模块处理依赖关系。 在这里插入图片描述

  2. 选择 Scope:默认显示所有范围的依赖项。 在这里插入图片描述

  3. 是否显示 GroupId:一般情况下 GroupId 并不需要显示,因此默认情况下此选项是未选中的。 在这里插入图片描述

  4. 是否只显示有冲突的依赖: 在这里插入图片描述

# IDEA 的冲突处理能力

IDEA 的依赖冲突显示方式与 Maven Helper 有一些不同:

在这里插入图片描述

  • 左边显示的是已经解决的依赖。
  • 右边显示的是选中依赖的使用情况(如它是通过哪个路径被引入的,路径长度等)。

以下是最终生效的版本号展示,与 Maven Helper 的方式有所不同:

在这里插入图片描述

相比 Maven Helper,笔者认为 IDEA 的这种显示方式更加直观。

不过,IDEA 的小缺陷在于:当你需要通过 exclusion 方式解决冲突时,它并不能一键完成,而是需要手动导航到问题处进行修改:

在这里插入图片描述

你认为 IDEA 未来会将该功能加上吗?

使用 IDEA 自带的依赖分析器时,打开 pom.xml 文件并不会像 Maven Helper 那样新增一个 tab,而是保持原样:

在这里插入图片描述

另外,值得一提的是:IDEA 的 Dependency Analyzer 功能不仅适用于 Maven,还适用于 Gradle。

编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08
Maven 上传中央仓库
Git - 介绍与安装

← Maven 上传中央仓库 Git - 介绍与安装→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式