无法使用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的依赖之一。 我用poi
, poi-scratchpad
, poi-ooxml
和poi-ooxml-schemas
build立了一个退化的Maven项目作为我的直接依赖。 Maven将这些其他JAR作为依赖关系进行抽取:
-
commons-codec-1.9.jar
-
xmlbeans-2.6.0.jar
-
stax-api-1.0.1.jar
在进一步的调查中,我发现stax-api
是xmlbeans
的传递依赖。