【问题标题】:Unable to open XLSX file using Apache POI: NoClassDefFoundError无法使用 Apache POI 打开 XLSX 文件:NoClassDefFoundError
【发布时间】:2014-12-26 19:30:37
【问题描述】:

我在尝试使用 Apache POI 打开 XLSX 文件时遇到问题。

我的代码:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelTest {
    public static void main(String[] args) {
        try(FileInputStream f = new FileInputStream(new File("path/to/my/file.xlsx"))) {
            XSSFWorkbook wb = new XSSFWorkbook(f); // This is the line throwing the exception
        } catch(IOException e) {
            System.err.println(e.getMessage());
            e.printStackTrace(System.err);
        }

    }
}

抛出异常:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xmlbeans/XmlException
    at my.TEST.ExcelTest.main(ExcelTest.java:24)
Caused by: java.lang.ClassNotFoundException: org.apache.xmlbeans.XmlException
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 1 more

背景:

  • 在 MacOS X(Mavericks)上运行 JDK 7
  • 使用 NetBeans
  • 导入的 jars(全部来自 Apache POI 二进制发行版):
    • poi-3.11-20141221.jar
    • poi-ooxml-3.11-20141221.jar
    • poi-ooxml-schemas-3.11-20141221.jar
    • commons-codec-1.9.jar
    • log4j-1.2.17.jar

我什至无法开始做真正的事情,因为我什至无法打开书! :(

当我看到异常时,我想“好吧,让我们获取 xmlbeans 并看看它是否有效”,但是 xmlbeans 被移到了 Apache 的阁楼中。

我错过了什么吗?如何打开工作簿?

【问题讨论】:

  • Apache Attic 意味着一个项目没有得到任何进一步的发展。之前的一切仍然有效!
  • 另外,您会在 Apache POI 二进制下载中找到您需要的所有 jars(包括 xmlbeans)!

标签: java excel apache-poi


【解决方案1】:

我认为你也需要xmlbeans-2.6.0.jar 是对的。这似乎是 Poi 的依赖项之一。我使用poipoi-scratchpadpoi-ooxmlpoi-ooxml-schemas 作为我的直接依赖项建立了一个残留的 Maven 项目。 Maven 将这些其他 JAR 作为依赖项:

  • commons-codec-1.9.jar
  • xmlbeans-2.6.0.jar
  • stax-api-1.0.1.jar

在进一步调查中,我发现stax-apixmlbeans 的传递依赖项。

【讨论】:

  • 谢谢!我现在因为自己没有发现它而感到有点愚蠢,但是......无论如何,我有点惊讶 POI 依赖于由 Apache “归档”的库(xmlbeans)......嗯......事情是有时很奇怪
  • @Barranka 如果有帮助我很高兴。我也不知道关于 Poi 的这一点,直到我碰巧检查了哪些内容被吸入了我的本地仓库。 Maven 倾向于让这些东西对我透明(有时可能太透明了)。
猜你喜欢
  • 1970-01-01
  • 2013-03-11
  • 1970-01-01
  • 2015-05-12
  • 1970-01-01
  • 2016-02-15
  • 1970-01-01
  • 2016-03-27
相关资源
最近更新 更多