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

我在尝试使用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:

 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上运行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

我什至不能开始做真正的东西,因为我甚至不能打开书! 🙁

当我看到这个exception时,我想“好吧,让我们来看看xmlbeans是否有效”,但是xmlbeans被移到了Apache的阁楼上。

我错过了什么吗? 我怎样才能打开工作簿?

我认为你也需要xmlbeans-2.6.0.jar 。 这似乎是Poi的依赖之一。 我用poipoi-scratchpadpoi-ooxmlpoi-ooxml-schemasbuild立了一个退化的Maven项目作为我的直接依赖。 Maven将这些其他JAR作为依赖关系进行抽取:

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

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