【Maven Helper】分析依赖冲突案例

server/2024/11/29 16:04:06/

目录

  • Maven Helper
  • 实际案例
    • java文件
    • pom.xml文件
    • 运行抛出异常
      • 分析
  • 参考资料

Maven Helper

A must have plugin for working with Maven.

  • easy way for analyzing and excluding conflicting dependencies
  • actions to run/debug maven goals for a module that contains the current file or on the root module
  • action to open terminal at the current maven module path
  • actions to run/debug the current test file.
    Usage:
  • Right click in Editor | Run Maven
  • Right click in Project View Toolbar | (Run|Debug) Maven
  • CTRL + ALT + R - “Run Maven Goal” popup (you can use Delete key in the popup)
  • CTRL + SHIFT + ALT + R - “Run Maven Goal on Root Module” popup (you can use Delete key in the popup)
  • Customize goals: Settings | Other Settings | Maven Helper
  • Define shortcuts: Settings | Keymap | Plug-ins | Maven Helper
  • Open pom file, click on ‘Dependency Analyzer’ tab, right click in the tree for context actions.

实际案例

java_19">java文件

java">package org.example;import com.alibaba.excel.EasyExcel;import java.util.ArrayList;/*** Hello world!**/
public class App
{public static void main( String[] args ){System.out.println( "Hello World!" );test();}public static void test() {//1.获取文件地址String fileName = "/excel/test.xlsx";//2、调用easyExcel里面的方法实现写操作EasyExcel.write(fileName, Object.class).sheet("某某报表").doWrite(new ArrayList<>());}
}

pom.xml文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>MavenHelperDemo</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><name>MavenHelperDemo</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.10.1</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version></dependency></dependencies>
</project>

主要依赖的为poi-ooxml 3.10.1版本和easyexcel 2.2.6版本。

运行抛出异常

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/util/TempFileCreationStrategyat com.alibaba.excel.write.ExcelBuilderImpl.<clinit>(ExcelBuilderImpl.java:30)at com.alibaba.excel.ExcelWriter.<init>(ExcelWriter.java:47)at com.alibaba.excel.write.builder.ExcelWriterBuilder.build(ExcelWriterBuilder.java:130)at com.alibaba.excel.write.builder.ExcelWriterBuilder.sheet(ExcelWriterBuilder.java:146)at com.alibaba.excel.write.builder.ExcelWriterBuilder.sheet(ExcelWriterBuilder.java:142)at org.example.App.test(App.java:24)at org.example.App.main(App.java:16)
Caused by: java.lang.ClassNotFoundException: org.apache.poi.util.TempFileCreationStrategyat java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)... 7 more

分析

  1. 从ExcelBuilderImpl的30行抛出异常,java.lang.NoClassDefFoundError: org/apache/poi/util/TempFileCreationStrategy。知道依赖的jar包版本种缺少该类。通过 ExcelBuilderImpl的30行跳转到相应的代码,你可以发现其实编辑器已经报错了,如下图所示
    在这里插入图片描述

  2. 打开Maven视图,可以知道easyexcel 2.2.6依赖的poi poi-ooxml poi-ooxml-schemas版本原本是3.17,由于依赖冲突,现在的依赖的版本都是3.10.1
    在这里插入图片描述

  3. 打开pom文件的选择 Dependency Analyzer视图,选择Conflicts,可以发现冲突的jar有poi poi-ooxml poi-ooxml-schemas slf4j-api。从下图所示右侧可以看到easyexcel 2.2.6依赖的1.7.26版本的slf4j-api 与 easyexcel 2.2.6依赖 =>3.4.0版本的ehcache=>1.7.7的slf4j-api冲突,由依赖冲突解决原则,最终选择了1.7.26版本的slf4j-api。同理可以分析另外3个冲突
    在这里插入图片描述

  4. org/apache/poi/util/TempFileCreationStrategy类是在poi包中的,所以我们现在要做的就是将poi的版本调整到3.17,所以我们可以通过exclude的方式
    **加粗样式**

6 . Maven视图查看,就可以看见poi的冲突没有了
在这里插入图片描述

参考资料

解决maven依赖冲突,这篇就够了!


http://www.ppmy.cn/server/145940.html

相关文章

通过DBUA升级 Oracle 11g到Oracle12c版本

Oracle 11g升级到Oracle12c Oracle11g数据库环境准备与数据备份 环境&#xff1a; oracle11.2.0.4 to oralce12.2.0.1 升级方案&#xff1a; 升级方案很多种&#xff0c;我们ORACLE培训课程第8阶段有所讲所有的升级方案&#xff0c;我们这里采用DBUA官方建议的方法 1、手…

ctfshow -web 89-115-wp

89. 显然&#xff0c;这里是需要绕过preg_match&#xff0c;绕过preg_match有三种方法 CTF 总结02&#xff1a;preg_match()绕过_pregmatch函数绕过-CSDN博客 90. 考intval。 这个与赣ctf有道题差不多&#xff0c;我是直接传入num4476a&#xff0c;intval&#xff08;4476a&a…

Vue 开发中为什么要使用穿透符::deep()

在 Vue 开发中&#xff0c;有时候样式需要穿透才能生效&#xff0c;通常是因为使用了作用域样式 (scoped styles) 的缘故。 1. 什么是作用域样式 (scoped styles)? 在 Vue 单文件组件 (SFC) 中&#xff0c;使用 <style scoped> 声明的样式只会作用于当前组件的元素。Vu…

【Qt】QDateTimeEdit控件实现清空(不保留默认时间/最小时间)

一、QDateTimeEdit控件 QDateTimeEdit 提供了一个用于编辑日期和时间的控件。用户可以通过键盘或使用上下箭头键来增加或减少日期和时间值。日期和时间的显示格式根据设置的格式显示&#xff0c;可以通过 setDisplayFormat() 方法来设置。 二、如何清空 我在使用的时候&#…

第十二章 使用 BIND 提供域名解析服务

1. DNS 域名解析服务 相较于由数字构成的 IP 地址&#xff0c;域名更容易被理解和记忆&#xff0c;所以我们通常更习惯通过域名的方式来访问网络中的资源。但是&#xff0c;网络中的计算机之间只能基于 IP 地址来相互识别对方的身份&#xff0c;而且要想在互联网中传输数据&…

Anaconda3 2024 jupyter notebook 配置默认文件路径

我的版本如下&#xff1a; 第一步&#xff1a; 打开命令行anaconda prompt &#xff0c; 敲下面命令生成配置文件 jupyter notebook --generate-config 如下图&#xff1a; 修改配置jupyter_notebook_config.py 文件中搜索c.ServerApp.root_dir &#xff08; 对于 Anac…

windows 应用 UI 自动化实战

UI 自动化技术架构选型 UI 自动化是软件测试过程中的重要一环&#xff0c;网络上也有很多 UI 自动化相关的知识或资料&#xff0c;具体到 windows 端的 UI 自动化&#xff0c;我们需要从以下几个方面考虑&#xff1a; 开发语言 毋庸置疑&#xff0c;在 UI 自动化测试领域&am…

Spring Bean初始化流程

首先&#xff1a; 加载Bean定义(Configuration) 然后对于每个Bean&#xff1a; 1、实例化Bean&#xff08;应该是从Bean方法中获取&#xff0c;Bean方法里面包含new这个类型的代码&#xff09;2、依赖注入&#xff08;所依赖的Bean要经历相同的流程&#xff09;、调用Setter…