无法使用Apache POI打开XLSX文件:NoClassDefFoundError

时间:2014-12-26 19:30:38

标签: java excel apache-poi

我在尝试使用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
  • 导入的jar(全部来自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的阁楼。

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

1 个答案:

答案 0 :(得分:2)

我认为你也需要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的传递依赖。

相关问题