NoClassDefFoundError org/apache/poi/ss/usermodel/Workbook
NoClassDefFoundError org/apache/poi/ss/usermodel/Workbook
我是 运行 一个 shell 脚本,它调用 java class 从数据库中获取一些数据并使用该数据创建一个 excel 报告.当代码在我的 java class:
中遇到以下行时,我在线程 "main" java.lang.NoClassDefFoundError: org/apache/poi/ss/usermodel/Workbook 中收到错误异常
XSSFWorkbook workbook = new XSSFWorkbook ();
这就是我定义 class路径的方式:
CLASSPATH=${CLASSPATH}:<path-to-jars>/poi-2.5.1-final-20040804.jar
CLASSPATH=${CLASSPATH}:<path-to-jars>/poi-ooxml-3.11.jar
我验证了这些 jars 已经下载(通过 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.access0(URLClassLoader.java:71)
at java.net.URLClassLoader.run(URLClassLoader.java:361)
at java.net.URLClassLoader.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.run(URLClassLoader.java:366)
at java.net.URLClassLoader.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
poi 2.5.1 没有包含这样的包(因此 class)(您可以通过解压缩 jar 文件来验证,因为它们本质上是 zip 存档)。见 source.
更新 poi 依赖到版本 3。这也有匹配 ooxml 版本的额外好处。
根据 this Apache POI FAQ entry,不支持在不同版本之间混合 POI jar 并且会以各种方式出现问题,例如您发现的那个。 不要这样做!
您需要使用来自同一版本的全部 POI jar。我建议 the latest version, available here(当前为 3.15)
您可能还应该查看 components and their dependencies page,以确保您拥有使用 Apache POI 所需的所有 jar。好吧,或者使用 Maven 或 Gradle 等依赖管理工具来为您处理!
我已经下载了最新的 Apache POI 二进制文件 v3.17 here,它具有创建 xlsx 文件所需的所有 jar,并且可以轻松打开。
所需的 jar 显示在下面的屏幕截图中(参考选定的 jar)FYR。
要使 apache poi 正常工作,您需要兼容的 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>
从您的 Maven 存储库中删除 poi jar,然后重新下载或构建项目。
我是 运行 一个 shell 脚本,它调用 java class 从数据库中获取一些数据并使用该数据创建一个 excel 报告.当代码在我的 java class:
中遇到以下行时,我在线程 "main" java.lang.NoClassDefFoundError: org/apache/poi/ss/usermodel/Workbook 中收到错误异常XSSFWorkbook workbook = new XSSFWorkbook ();
这就是我定义 class路径的方式:
CLASSPATH=${CLASSPATH}:<path-to-jars>/poi-2.5.1-final-20040804.jar
CLASSPATH=${CLASSPATH}:<path-to-jars>/poi-ooxml-3.11.jar
我验证了这些 jars 已经下载(通过 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.access0(URLClassLoader.java:71)
at java.net.URLClassLoader.run(URLClassLoader.java:361)
at java.net.URLClassLoader.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.run(URLClassLoader.java:366)
at java.net.URLClassLoader.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
poi 2.5.1 没有包含这样的包(因此 class)(您可以通过解压缩 jar 文件来验证,因为它们本质上是 zip 存档)。见 source.
更新 poi 依赖到版本 3。这也有匹配 ooxml 版本的额外好处。
根据 this Apache POI FAQ entry,不支持在不同版本之间混合 POI jar 并且会以各种方式出现问题,例如您发现的那个。 不要这样做!
您需要使用来自同一版本的全部 POI jar。我建议 the latest version, available here(当前为 3.15)
您可能还应该查看 components and their dependencies page,以确保您拥有使用 Apache POI 所需的所有 jar。好吧,或者使用 Maven 或 Gradle 等依赖管理工具来为您处理!
我已经下载了最新的 Apache POI 二进制文件 v3.17 here,它具有创建 xlsx 文件所需的所有 jar,并且可以轻松打开。
所需的 jar 显示在下面的屏幕截图中(参考选定的 jar)FYR。
要使 apache poi 正常工作,您需要兼容的 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>
从您的 Maven 存储库中删除 poi jar,然后重新下载或构建项目。