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

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

问题描述

我正在运行一个 shell 脚本,它调用一个 java 类从数据库中获取一些数据并使用该数据创建一个 excel 报告.当代码在我的 java 类中遇到以下行时,我在线程main"java.lang.NoClassDefFoundError: 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?

堆栈跟踪:

    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

推荐答案

根据 这个 ApachePOI 常见问题条目,不支持在不同版本之间混合 POI 罐子,并且会以各种方式损坏,例如您找到的那种.不要这样做!

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天全站免登陆