NoClassDefFoundError org/apache/poi/ss/usermodel/Workbook [英] NoClassDefFoundError org/apache/poi/ss/usermodel/Workbook

查看:1585
本文介绍了NoClassDefFoundError org/apache/poi/ss/usermodel/Workbook的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在运行一个外壳程序脚本,该脚本调用Java类从数据库中获取一些数据并使用该数据创建Excel报告.当代码到达我的Java类中的以下行时,我在线程主" java.lang.NoClassDefFoundError中收到错误Exception:org/apache/poi/ss/usermodel/Workbook.

I am running a shell script which calls a java class to get some data from database and create an excel report with that data. I get the error Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/ss/usermodel/Workbook when the code hits the below line in my java class:

XSSFWorkbook  workbook = new XSSFWorkbook ();

这是我定义类路径的方式:

This is how I have defined the classpath:

CLASSPATH=${CLASSPATH}:<path-to-jars>/poi-2.5.1-final-20040804.jar
CLASSPATH=${CLASSPATH}:<path-to-jars>/poi-ooxml-3.11.jar

我验证了jars已下载(通过gradle),因此试图了解我在这里缺少什么.有人可以帮我吗?

I verified that the jars have been downloaded(via gradle), so trying to understand what am I missing here. Can someone please help me with this?

Stacktrace:

Stacktrace:

    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/ss/usermodel/Workbook
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        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)
        at com.test.ExcelReportGenerator.writeExcel(ExcelReportGenerator.java:26)
        at com.test.ReportRunner.createReport(ReportRunner.java:109)
        at com.test.ReportRunner.main(ReportRunner.java:93)
Caused by: java.lang.ClassNotFoundException: org.apache.poi.ss.usermodel.Workbook
        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)
        ... 15 more

推荐答案

按照此Apache POI FAQ条目,不支持在不同版本之间混合POI jars ,并且会以各种方式破坏,例如您发现的那种. 不要这样做!

As per this Apache POI FAQ entry, mixing POI jars between different versions is not supported and will break in all sorts of ways, such as the one you've found. Don't do it!

您需要使用同一发行版中的所有POI jar.我建议最新版本,在此处提供(当前为3.15)

You need to be using your POI jars all from the same release. I'd suggest the latest version, available here (currently 3.15)

您可能还应该查看组件及其依赖项页面,以确保您您已经获得了使用Apache POI所需的所有jar.好吧,或者使用Maven或Gradle之类的依赖项管理工具来为您处理!

You should probably also review the components and their dependencies page, to ensure you've got all the required jars for your use of Apache POI. Well, or use a dependency management tool like Maven or Gradle to handle that for you!

这篇关于NoClassDefFoundError org/apache/poi/ss/usermodel/Workbook的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆