1

我看到这个问题问了很多,但我仍然无法找到解决方案。一个适合我的解决方案。我有一个使用 Apache POI 的项目,并且我确保包含所有外部 JAR。该项目在 Eclipse 中编译并运行良好,但是当我使用“ java -jar Test.jar”运行 jar 时出现此错误:

线程“主”java.lang.NoClassDefFoundError 中的异常:org/apache/poi/ss/usermodel/Sheet

我不确定这是否是有用的信息,但我为我的项目创建了一个 lib 文件夹并将 poi 库放在那里。这意味着当我创建它时,依赖项就在 JAR 文件中,我想我应该提到这一点,因为我看到了一些关于将外部 jar 放在可执行 jar 旁边的解决方案。我还尝试将我的类路径设置为项目的目录。

我似乎做错了什么?

4

5 回答 5

5

Apache POI JAR 文件不在您的运行时类路径中。使用文件Test.jar中的以下清单条目重建MANIFEST.MF

Class-Path: poi-3.9-20121203.jar
于 2013-07-10T21:33:41.277 回答
1

java -jar [filename].jar命令失败时,几乎总是因为以下两件事之一:

  1. 您的 MANIFEST.MF 搞砸了,没有正确列出依赖项。确保清单文件中的所有 jar 依赖项都指向 jar,相对于 jar 的父目录。

  2. 您缺少 .class 文件,无论是在您的特定 jar 中还是在您依赖的 jar 中。确保您的 jar 包含org/apache/poi/ss/usermodel/Sheet.class或您的清单层次结构指向包含该类的 jar。

于 2013-07-10T21:36:18.287 回答
0

您需要在 Jar 文件的清单文件中提供类路径。看这个官方文档

一个例子

我们希望将 MyUtils.jar 中的类加载到类路径中,以便在 MyJar.jar 中使用。这两个 JAR 文件位于同一目录中。

我们首先创建一个文本文件,命名Manifest.txt为以下内​​容:

Class-Path: MyUtils.jar
于 2013-07-10T21:33:17.540 回答
0

首先检查您的目标 jar ( Test.jar) 是否是包含所有必需依赖项的胖 jar。

$ jar tf Test.jar

您应该在那里看到您的lib/文件夹,其中包含所有必需的依赖项(包括 Apache POI)。如果是这种情况,请按照其他人的建议进行操作,将 Apache POI 添加到您的MANIFEST.MF.

正如您所建议的,关于将您的 jar 依赖项放在一个单独的文件夹中,这也是可能的。想象一下您的依赖项存储lib/Test.jar. 您可以使用以下命令运行代码:

$ java -cp ".:lib/*" org.Test.Main

它只是将 lib/ 文件夹中的所有 .jar 添加到您的类路径中。在这种情况下,您还需要指定主类的名称(全名)。

于 2013-07-10T21:51:26.857 回答
0

I also got this problem and tried to google it..

i have found out that i have to read the error log

I cant save my file to .xls so in my case after reading the error i found that a jar file is missing i just added the jar file poi-3.7-20101029 located in the ext folder of my ireport

ex.YourIReportFolder/ireport/modules/ext-poi.x.x-xxxx

hope this helps :)

于 2015-06-20T04:01:40.630 回答