jetlinks-community icon indicating copy to clipboard operation
jetlinks-community copied to clipboard

“NoSuchMethodErrors” due to multiple versions of org.apache.poi:poi:jar

Open Bing-ok opened this issue 8 months ago • 1 comments

Issue description:

Hi, there are multiple versions of org.apache.poi:poi in jetlinks-components/io-component:1.9.0. As shown in the following dependency tree, according to Maven "nearest wins" strategy, only org.apache.poi:poi:4.1.2 can be loaded, org.apache.poi:poi:3.17 will be shadowed.

However, several methods defined in shadowed version org.apache.poi:poi:3.17 are referenced by client project via com.alibaba:easyexcel:2.1.2 but missing in the actually loaded version org.apache.poi:poi:4.1.2.

For instance, the following missing method(defined in org.apache.poi:poi:3.17) are actually referenced by io-component, which will introduce a runtime error(i.e., "NoSuchMethodError") into io-component.

  1. <org.apache.poi.poifs.filesystem.DirectoryNode: org.apache.poi.poifs.filesystem.NPOIFSFileSystem getFileSystem()> is invoked by io-component via the following path:
path--
<org.jetlinks.community.io.excel.easyexcel.ExcelReadDataListener: void lambda$of$0(java.io.InputStream,java.lang.Class,reactor.core.publisher.FluxSink) org.jetlinks.community:io-component:1.9.0; 
<com.alibaba.excel.read.builder.ExcelReaderBuilder: com.alibaba.excel.read.builder.ExcelReaderSheetBuilder sheet() com.alibaba:easyexcel:2.1.2;
<com.alibaba.excel.read.builder.ExcelReaderBuilder: com.alibaba.excel.read.builder.ExcelReaderSheetBuilder sheet(java.lang.Integer,java.lang.String)> com.alibaba:easyexcel:2.1.2; 
<com.alibaba.excel.read.builder.ExcelReaderBuilder: com.alibaba.excel.ExcelReader build()> com.alibaba:easyexcel:2.1.2;
<com.alibaba.excel.ExcelReader: void init (com.alibaba.excel.read.metadata.ReadWorkbook)> com.alibaba:easyexcel:2.1.2; 
<com.alibaba.excel.analysis.ExcelAnalyserImpl: void init (com.alibaba.excel.read.metadata.ReadWorkbook)> com.alibaba:easyexcel:2.1.2; 
<com.alibaba.excel.analysis.ExcelAnalyserImpl: void choiceExcelExecutor()> com.alibaba:easyexcel:2.1.2; 
<org.apache.poi.poifs.filesystem.DocumentFactoryHelper: java.io.InputStream getDecryptedStream(org.apache.poi.poifs.filesystem.NPOIFSFileSystem,java.lang.String)>
  1. <org.apache.poi.poifs.filesystem.DocumentFactoryHelper: java.io.InputStream getDecryptedStream(org.apache.poi.poifs.filesystem.NPOIFSFileSystem,java.lang.String)> is invoked by io-component via the following path:
path-----
<org.jetlinks.community.io.excel.easyexcel.ExcelReadDataListener: void lambda$of$0(java.io.InputStream,java.lang.Class,reactor.core.publisher.FluxSink)> org.jetlinks.community:io-component:1.9.0; 
<com.alibaba.excel.read.builder.ExcelReaderBuilder: com.alibaba.excel.read.builder.ExcelReaderSheetBuilder sheet()> com.alibaba:easyexcel:2.1.2; 
<com.alibaba.excel.read.builder.ExcelReaderBuilder: com.alibaba.excel.read.builder.ExcelReaderSheetBuilder sheet(java.lang.Integer,java.lang.String)> com.alibaba:easyexcel:2.1.2; 
<com.alibaba.excel.read.builder.ExcelReaderBuilder: com.alibaba.excel.ExcelReader build()> com.alibaba:easyexcel:2.1.2;
<com.alibaba.excel.ExcelReader: void init (com.alibaba.excel.read.metadata.ReadWorkbook)> com.alibaba:easyexcel:2.1.2;
<com.alibaba.excel.analysis.ExcelAnalyserImpl: void init (com.alibaba.excel.read.metadata.ReadWorkbook)> com.alibaba:easyexcel:2.1.2;
<com.alibaba.excel.analysis.ExcelAnalyserImpl: void choiceExcelExecutor()> com.alibaba:easyexcel:2.1.2;
<org.apache.poi.poifs.filesystem.NPOIFSFileSystem: org.apache.poi.poifs.filesystem.DirectoryNode getRoot()>
  1. <org.apache.poi.poifs.filesystem.NPOIFSFileSystem: org.apache.poi.poifs.filesystem.DirectoryNode getRoot()> is invoked by io-component via the following path:
path-----
<org.jetlinks.community.io.excel.easyexcel.ExcelReadDataListener: void lambda$of$0(java.io.InputStream,java.lang.Class,reactor.core.publisher.FluxSink)> org.jetlinks.community:io-component:1.9.0;
<com.alibaba.excel.read.builder.ExcelReaderBuilder: com.alibaba.excel.read.builder.ExcelReaderSheetBuilder sheet()> com.alibaba:easyexcel:2.1.2;
<com.alibaba.excel.read.builder.ExcelReaderBuilder: com.alibaba.excel.read.builder.ExcelReaderSheetBuilder sheet(java.lang.Integer,java.lang.String)> com.alibaba:easyexcel:2.1.2;
<com.alibaba.excel.read.builder.ExcelReaderBuilder: com.alibaba.excel.ExcelReader build()> com.alibaba:easyexcel:2.1.2;
<com.alibaba.excel.ExcelReader: void init (com.alibaba.excel.read.metadata.ReadWorkbook)> com.alibaba:easyexcel:2.1.2;
<com.alibaba.excel.analysis.ExcelAnalyserImpl: void init (com.alibaba.excel.read.metadata.ReadWorkbook)> com.alibaba:easyexcel:2.1.2;
<com.alibaba.excel.analysis.ExcelAnalyserImpl: void choiceExcelExecutor()> com.alibaba:easyexcel:2.1.2;
<org.apache.poi.poifs.filesystem.DirectoryNode: org.apache.poi.poifs.filesystem.NPOIFSFileSystem getFileSystem()>
  1. <org.apache.poi.poifs.filesystem.NPOIFSFileSystem: void close()> is invoked by io-component via the following path:
path-----
<org.jetlinks.community.io.excel.easyexcel.ExcelReadDataListener: void lambda$of$0(java.io.InputStream,java.lang.Class,reactor.core.publisher.FluxSink)> org.jetlinks.community:io-component:1.9.0;
<com.alibaba.excel.read.builder.ExcelReaderSheetBuilder: void doRead()> com.alibaba:easyexcel:2.1.2; 
<com.alibaba.excel.ExcelReader: void finish()> com.alibaba:easyexcel:2.1.2;
<com.alibaba.excel.analysis.ExcelAnalyserImpl: void finish()> com.alibaba:easyexcel:2.1.2;
<org.apache.poi.poifs.filesystem.NPOIFSFileSystem: void close()>

Suggested fixing solutions:

  1. Change dependency com.alibaba:easyexcel from 2.1.2 to 3.3.2.Because the newer version com.alibaba:easyexcel:3.3.2 does not invoke the above missing methods, such changing cn solve the problem.
  2. Use to exclude org.apache.poi:poi of org.hswebframework:reactor-excel:1.0.0

Please let me know which solution you prefer? I can submit a PR to fix it.

Thank you very much for your attention. Best regards,

Dependency tree--


[INFO] |  +- (org.slf4j:slf4j-api:jar:1.7.30:compile - version managed from 1.7.25; omitted for conflict with 1.7.25)
[INFO] |  +- (io.projectreactor:reactor-core:jar:3.3.13.RELEASE:compile - version managed from 3.3.6.RELEASE; omitted for duplicate)
[INFO] |  \- io.projectreactor.addons:reactor-extra:jar:3.3.5.RELEASE:compile (version managed from 3.3.0.RELEASE)
[INFO] |     \- (io.projectreactor:reactor-core:jar:3.3.13.RELEASE:compile - version managed from 3.3.0.RELEASE; omitted for duplicate)
[INFO] +- com.alibaba:easyexcel:jar:2.1.2:compile
[INFO] |  +- (org.apache.poi:poi:jar:3.17:compile - omitted for conflict with 4.1.2)
[INFO] |  +- (org.apache.poi:poi-ooxml:jar:3.17:compile - omitted for conflict with 4.1.2)
[INFO] |  +- cglib:cglib:jar:3.1:compile
[INFO] |  |  \- org.ow2.asm:asm:jar:4.2:compile
[INFO] |  +- (org.slf4j:slf4j-api:jar:1.7.30:compile - version managed from 1.7.26; omitted for duplicate)
[INFO] |  \- org.ehcache:ehcache:jar:3.8.1:compile (version managed from 3.7.1)

Bing-ok avatar Nov 15 '23 15:11 Bing-ok