Maven依賴沖突問題及解決過程
引言
在開發(fā)過程中你的maven依賴有沖突,但是打包的Jar包照樣可以運行只有使用到?jīng)_突包里的功能時會報依賴沖突錯誤比如:
java.lang.NoClassDefFoundError: org/apache/poi/util/POILogFactory
at org.apache.poi.hwpf.model.FileInformationBlock.<clinit>(FileInformationBlock.java:52) ~[poi-scratchpad-4.1.2.jar!/:4.1.2]
at org.apache.poi.hwpf.HWPFDocumentCore.<init>(HWPFDocumentCore.java:170) ~[poi-scratchpad-4.1.2.jar!/:4.1.2]
at org.apache.poi.hwpf.HWPFDocument.<init>(HWPFDocument.java:193) ~[poi-scratchpad-4.1.2.jar!/:4.1.2]
at org.apache.poi.hwpf.HWPFDocument.<init>(HWPFDocument.java:177) ~[poi-scratchpad-4.1.2.jar!/:4.1.2]
at org.apache.poi.hwpf.HWPFDocument.<init>(HWPFDocument.java:165) ~[poi-scratchpad-4.1.2.jar!/:4.1.2]
at com.zxx.hand.WordHandler.handContent(WordHandler.java:47) ~[classes!/:1.0]
at com.zxx.hand.DocumentAttachmentHandler.getAttachmentInfo(DocumentAttachmentHandler.java:51) ~[classes!/:1.0]
at com.zxx.elasticsearch.FileAnalysisElasticsearchTask.fileAnalysis(FileAnalysisElasticsearchTask.java:64) ~[classes!/:1.0]
at com.zxx.service.impl.FileAnalysisServiceImpl$1.run(FileAnalysisServiceImpl.java:50) ~[classes!/:1.0]
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) ~[na:na]
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
Caused by: java.lang.ClassNotFoundException: org.apache.poi.util.POILogFactory
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:476) ~[na:na]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588) ~[na:na]
at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:151) ~[nnd-document-parser.jar:1.0]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[na:na]
... 15 common frames omitted
1、找出沖突包
1.1 找到pom.xml文件

1.2 點擊Show Diagrams查看依賴圖
右擊pom.xml文件點擊--》Show Diagrams

如下圖會列出沖突包

2、移除沖突包
maven移除包中依賴
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>${poi.version}</version>
<!-- 移除包中依賴 -->
<exclusions>
<exclusion>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
</exclusion>
</exclusions>
</dependency>總結(jié)
Maven通過依賴管理解決Jar包沖突,使用依賴調(diào)解、依賴排除和依賴范圍等策略。
依賴調(diào)解選擇最近的版本,依賴排除可移除沖突的依賴,依賴范圍控制依賴的作用域。
合理配置POM文件,確保項目依賴清晰、穩(wěn)定。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
spring boot在啟動項目之后執(zhí)行的實現(xiàn)方法
在開發(fā)時有時候需要在整個應(yīng)用開始運行時執(zhí)行一些特定代碼,比如初始化環(huán)境,下面這篇文章就來給大家介紹了關(guān)于spring boot在啟動項目之后執(zhí)行自己要執(zhí)行的東西的實現(xiàn)方法,文中給出了詳細的示例代碼,需要的朋友可以參考下。2017-09-09
從入門到精通Spring Boot中WebSocket常用方法
本文將從入門到精通,詳細介紹Spring Boot中WebSocket的常用使用方法,涵蓋協(xié)議特性、消息收發(fā)、點對點通信、認證攔截及注解實現(xiàn)方式,,需要的朋友跟隨小編一起看看吧2025-08-08
Java中mybatis關(guān)于example類的使用詳解
這篇文章主要介紹了Java中mybatis中關(guān)于example類的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-07-07
一文帶你掌握springBoot如何做到優(yōu)雅停機的
在分布式系統(tǒng)中,服務(wù)的優(yōu)雅停機(Graceful Shutdown)是確保業(yè)務(wù)連續(xù)性的重要機制,下面就跟隨小編一起來深入了解下springBoot實現(xiàn)優(yōu)雅停機的具體方式吧2025-04-04
Spring用AspectJ開發(fā)AOP(基于Annotation)
這篇文章主要介紹了Spring用AspectJ開發(fā)AOP(基于Annotation),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-10-10

