当Excel处理神器EasyExcel遇上Apache POI:一场关于依赖的趣味‘撞车’冒险
全栈Blue 2024-07-25 11:37:02 阅读 68
目录
前言
报错
解决思想
解决方案
结尾
前言
🎈🎈🎈"Hey there, 大家好!我是Blue,今天可不是一般的‘代码奇遇记’!我在与EasyExcel这位数据处理界的魔术师共舞时,突然遭遇了前所未有的‘魔法失灵’!那场面,简直是程序员版的《哈利·波特》遇上‘魔法消失’的尴尬。不过别担心,我这个侦探Blue可不是吃素的,经过一番抽丝剥茧,外加一点点编程界的‘魔法药水’——其实就是深思熟虑和耐心调试,嘿嘿,问题终于被我这个大侦探给揪出来了,还顺手给它来了个漂亮的‘修复术’!现在,EasyExcel又愉快地为我服务,仿佛什么都没发生过一样。所以说,遇到代码难题别慌张,咱们都是编程界的小小探险家嘛!"🎈🎈🎈
报错
<code>com.alibaba.excel.exception.ExcelAnalysisException: java.lang.NoClassDefFoundError: org/apache/poi/POIXMLTypeLoader
at com.alibaba.excel.analysis.ExcelAnalyserImpl.<init>(ExcelAnalyserImpl.java:57)
at com.alibaba.excel.ExcelReader.<init>(ExcelReader.java:145)
at com.alibaba.excel.read.builder.ExcelReaderBuilder.build(ExcelReaderBuilder.java:193)
at com.alibaba.excel.read.builder.ExcelReaderBuilder.sheet(ExcelReaderBuilder.java:229)
at com.alibaba.excel.read.builder.ExcelReaderBuilder.sheet(ExcelReaderBuilder.java:217)
at com.example.jishedemo1.Worldtext.test6(Worldtext.java:139)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
Caused by: java.lang.NoClassDefFoundError: org/apache/poi/POIXMLTypeLoader
at org.openxmlformats.schemas.spreadsheetml.x2006.main.WorkbookDocument$Factory.parse(Unknown Source)
at com.alibaba.excel.analysis.v07.XlsxSaxAnalyser.analysisUse1904WindowDate(XlsxSaxAnalyser.java:117)
at com.alibaba.excel.analysis.v07.XlsxSaxAnalyser.<init>(XlsxSaxAnalyser.java:79)
at com.alibaba.excel.analysis.ExcelAnalyserImpl.choiceExcelExecutor(ExcelAnalyserImpl.java:99)
at com.alibaba.excel.analysis.ExcelAnalyserImpl.<init>(ExcelAnalyserImpl.java:51)
... 8 more
Caused by: java.lang.ClassNotFoundException: org.apache.poi.POIXMLTypeLoader
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
... 13 more
解决思想
嘿,小伙伴们,我碰到了个挺逗的事儿!我在审查我的Java代码时,眼睛一瞪,发现了一行刺眼的错误提示:java.lang.NoClassDefFoundError: org/apache/poi/POIXMLTypeLoader
。这简直就像是在告诉我,我的应用小伙伴在派对上突然找不到它的舞伴Apache POI库里的POIXMLTypeLoader
类了!但让我百思不得其解的是,我明明记得这场派对(也就是我的项目)并没有邀请Apache POI这位嘉宾啊!它怎么就不请自来了,还搞出了这么一出‘失踪案’?
好奇心驱使下,我像是侦探附体,决定揭开这个谜团。于是,我转身向智慧的‘文心一言’求助,就像是对着魔法水晶球提问一样,希望它能给我指点迷津。我心想,或许这背后隐藏着什么不为人知的依赖秘密,或者是某个调皮的库悄悄拉来了Apache POI当助手,而我还被蒙在鼓里呢!这次经历,真是让我对Java世界的复杂性和趣味性又多了几分敬畏呢!根据文心一言的提示(如下图)
依赖冲突?说起依赖冲突,我脑袋里的小灯泡突然一亮!既然easyexcel和Apache POI这两个库都是咱们处理Excel、Word这些文档的得力助手,我琢磨着,它们之间会不会有啥亲戚关系呢?就像是厨师和他的厨房工具,一个高手级的厨师(easyexcel)可能就是在普通厨具(Apache POI)的基础上,打造出了自己的一套专属神器。
我好奇地翻阅了easyexcel的官网,还特意在百度上搜罗了一番,嘿,还真让我发现了端倪!原来,easyexcel这位‘大厨’确实是站在Apache POI这位‘老前辈’的肩膀上成长起来的。换句话说,easyexcel在开发时就已经深深打上了poi的烙印,它内部就自带了poi的依赖,就像做菜时必不可少的调料一样(看下图就明白了)。这下子,依赖冲突的问题就变得豁然开朗了,原来它们是一家人嘛!
那么问题就解决了,我在项目中即使用了poi,又使用了easyexcel,此时同时使用就会造成依赖冲突。 那么问题就是如何解决依赖冲突喏!
解决方案
<code><dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel-core</artifactId>
<version>自己的版本</version>
<exclusions>
<exclusion>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
</exclusion>
</exclusions>
</dependency>
结尾
🎈🎈🎈🎈"衷心希望本篇详尽而深入的文章能够成为您探索之旅中的一盏明灯,不仅解答您当前的疑惑,更能激发您对技术领域的无限热情与好奇心。我们力求通过每一个字、每一句话,为每一位读者搭建起一座知识的桥梁,让您在技术的海洋中航行时更加从容不迫,收获满满。无论是初学者还是资深开发者,相信都能从本文中找到对自己有所助益的宝贵信息,共同进步,携手前行。"🎈🎈🎈🎈
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。