当前位置: 首页 > 知识库问答 >
问题:

NoClassDefFoundError org/apache/poi/ss/usermodel/工作簿

公孙宏畅
2023-03-14

我正在运行一个shell脚本,它调用一个java类从数据库中获取一些数据,并用这些数据创建一个excel报表。当代码在我的java类中遇到下面一行时,我在线程“main”Java . lang . noclassdeffounderror:org/Apache/poi/ss/user model/Workbook中得到错误异常:

XSSFWorkbook  workbook = new XSSFWorkbook ();

以下是我定义类路径的方式:

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

我验证了jar已经被下载(通过gradle),因此试图了解我在这里遗漏了什么。有人能帮我吗?

堆栈跟踪:

    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

共有3个答案

华星文
2023-03-14

要使apachepoi工作,您需要兼容的jar。我用过这些罐子

      <dependency>
             <groupId>org.apache.poi</groupId>
             <artifactId>poi</artifactId>
             <version>3.9</version>
      </dependency>
      <dependency>
             <groupId>org.apache.poi</groupId>
             <artifactId>poi-ooxml</artifactId>
             <version>3.9</version>
      </dependency>
      <dependency>
             <groupId>org.apache.poi</groupId>
             <artifactId>poi-ooxml-schemas</artifactId>
             <version>3.9</version>
      </dependency>
      <dependency>
             <groupId>org.apache.poi</groupId>
             <artifactId>poi-scratchpad</artifactId>
             <version>3.9</version>
      </dependency>
      <dependency>
             <groupId>org.apache.poi</groupId>
             <artifactId>ooxml-schemas</artifactId>
             <version>1.1</version>
      </dependency>
      <dependency>
             <groupId>org.apache.poi</groupId>
             <artifactId>openxml4j</artifactId>
             <version>1.0-beta</version>
      </dependency>
何涵衍
2023-03-14

我在这里下载了最新的Apache POI二进制文件v3.17,它具有创建xlsx文件和打开所需的所有jar,无需大惊小怪。

所需的罐子显示在下面的截图(指选定的罐子)FYR。

秦跃
2023-03-14

根据这个Apache POI FAQ条目,不支持在不同版本之间混合POI jars,并且会以各种方式中断,例如您发现的这种方式。不要这样做!

您需要使用同一版本的POI罐。我建议使用最新版本,可在此处获得(目前为3.15)

您可能还应该查看组件及其依赖项页面,以确保您拥有使用Apache POI所需的所有jar。或者使用Maven或Gradle等依赖管理工具来为您处理!

 类似资料:
  • 我使用maven来管理我的web项目依赖关系。我添加apache poi依赖到我的pom文件.它不显示错误时,符合.但当它运行,它将抛出运行时间异常在我的Main Application()类.而它给java.lang.NoClassDefFoundError: org/apache/poi/ss/userModel/Workbook 我有一门主要的应用课程。 } 下面是我的补充

  • 问题内容: 我制作了一个小型应用程序,可以从excel(xls文件)中读取内容并将其内容显示到JTable中。在eclipse中一切正常,但是当我创建jar文件并尝试运行它时,出现以下问题: 我发现奇怪的是,问题出在行上,当在行之前调用Workbook和Sheet时,它没有任何麻烦(至少从我的观察中可以看出)。 我已经研究了很多,主要似乎是jar文件不在Class-Path中,但是打开jar和清单

  • 我正在使用ApachePOI读取一些Excel文件。我创建了一个控制台应用程序来完成这项工作,之后我尝试将代码集成到SpringMVCwebapp中(我知道没什么特别的)。我已将相同的Jar文件包含到我的类路径中,但每当我尝试运行代码时,都会出现以下错误: 我相信类Font是在编译时找到的,但不是在运行时。我很确定问题不在于ClassPath,但是我不知道如何解决这个问题。 编辑:当我用main方

  • 我制作了一个小应用程序,它从excel(xls文件)读取内容并将内容显示到JTable。eclipse中的一切都很好,但是当我创建jar文件并尝试运行它时,我遇到了以下问题: 我发现的奇怪的事情是,问题是行,当工作簿和工作表被称为行之前,并没有给任何麻烦(至少从我可以看到)。 我已经研究了很多,主要似乎是jar文件不在类路径中,但是打开jar和清单文件,我可以看到所有的jar都存在。 这就是我的p

  • 嗨,我知道这个问题已经被问了很多次了,但是我已经尝试了所有建议的问题! 我的代码在Eclipse中运行得非常好,但是我想在Unix中构建jar并通过命令行运行。 在我的依赖ivy.xml我列出了我的依赖: 但是当我执行我的jar时,我得到了以下错误: 线程“main”java中出现异常。lang.NoClassDefFoundError:org/apache/poi/ss/usermodel/Ro