NoClassDefFoundError: org/apache/poi/util/POILogFactory

And*_*rew 5 eclipse p2 eclipse-rcp apache-poi maven

我正在尝试在 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>
Run Code Online (Sandbox Code Playgroud)

<id>org.apache.poi:poi-ooxml:3.14</id>(与和相同<id>org.apache.poi:poi-ooxml-schemas:3.14</id>)。

我尝试直接在代码中使用 POILoggerFactoryPOILogger logger = POILogFactory.getLogger(POIXMLDocumentPart.class); logger.log(POILogger.INFO, "Test");并且它有效!我不知道出了什么问题。

小智 4

请。检查 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);
Run Code Online (Sandbox Code Playgroud)

以下是 POI 的组件列表 - http://poi.apache.org/overview.html#components

据我所知,这些是 POI 的依赖项列表

Poi-3.10-Final.jar Poi-ooxml-3.10-Final.jar Poi-ooxml-schemas-3.10.jar Xmlbeans-2.30.jar

我希望它有帮助。