我正在尝试在Eclipse RCP项目中使用Apache POI库。
所以我将poi,poi-ooxml和poi-ooxml-schemas添加到项目中,但仍然有一个例外
java.lang.NoClassDefFoundError: org/apache/poi/util/POILogFactory
at org.apache.poi.POIXMLDocumentPart.<clinit>(POIXMLDocumentPart.java:53)
在这一行:
XWPFDocument doc = new XWPFDocument();
要将poi添加到项目中,有一个p2-repository和p2-maven插件,其中包含以下工件:
<artifact>
<id>org.apache.poi:poi:3.14</id>
<source>true</source>
<transitive>false</transitive>
<instructions>
<Import-Package></Import-Package>
<Export-Package>*</Export-Package>
<DynamicImport-Package>*</DynamicImport-Package>
</instructions>
</artifact>
(与<id>org.apache.poi:poi-ooxml:3.14</id>
和<id>org.apache.poi:poi-ooxml-schemas:3.14</id>
相同)
我尝试在代码POILogger logger = POILogFactory.getLogger(POIXMLDocumentPart.class);
logger.log(POILogger.INFO, "Test");
中直接使用POILoggerFactory,它可以正常工作!
我不知道,有什么不对。
答案 0 :(得分:0)
PLS。检查poi.jar和poi-ooxml.jar的版本,如果它们相同或任何旧的POI jar已经在您的类路径中。 您可以尝试使用这段代码来获取编译器读取的POI jar版本:
ClassLoader classloader =
org.apache.poi.poifs.filesystem.POIFSFileSystem.class.getClassLoader();
URL resPath = classloader.getResource(
"org/apache/poi/poifs/filesystem/POIFSFileSystem.class");
String path = resPath.getPath();
System.out.println("The actual POI Path is " + path);
以下是POI的组件列表 - http://poi.apache.org/overview.html#components
据我所知,这些是POI的依赖列表
POI-3.10-Final.jar POI-OOXML-3.10-Final.jar POI-OOXML-架构 - 3.10.jar 的xmlbeans-2.30.jar
我希望它有所帮助。
答案 1 :(得分:0)
我也遇到了这个问题。两个包中的同名包似乎是一个问题(我发现this article)。一旦我解决了这个问题,就会有更多的类错误需要解决。
因此,在对Import-Package
和Require-Bundle
尝试多种变体后,以下是适用于我的项目的p2-maven插件的配置:
<artifacts>
<artifact>
<id>org.apache.poi:poi:3.16</id>
<source>true</source>
<instructions>
<Import-Package>*;resolution:=optional</Import-Package>
<Export-Package>*;-noimport:=true</Export-Package>
</instructions>
</artifact>
<artifact>
<id>org.apache.poi:poi-ooxml:3.16</id>
<source>true</source>
<instructions>
<Import-Package>*;resolution:=optional</Import-Package>
<Export-Package>*;-noimport:=true</Export-Package>
<Require-Bundle>org.apache.poi;bundle-version="[3.16.0,4.0.0)"</Require-Bundle>
</instructions>
</artifact>
<artifact>
<id>org.apache.poi:poi-ooxml-schemas:3.16</id>
<source>true</source>
<instructions>
<Import-Package>!org.apache.poi,org.apache.xmlbeans.impl.schema;resolution:=optional,*;resolution:=optional</Import-Package>
<Export-Package>*;-noimport:=true</Export-Package>
<Require-Bundle>org.apache.poi.ooxml;bundle-version="[3.16.0,4.0.0)"</Require-Bundle>
</instructions>
</artifact>
</artifacts>
重要的部分是:
poi
捆绑(导入org.apache.poi.util
不工作)org.apach.poi
,导入org.apache.xmlbeans.impl.schema
包,并需要poi-ooxml
包