Java org/apache/poi/ss/usermodel/Sheet的NoClassDefFoundError Jar错误
我看到这个问题被问了很多次,但我仍然找不出解决办法。一个对我有效的解决方案。我有一个使用ApachePOI的项目,我确保包含所有外部JAR。该项目在eclipse中编译并运行良好,但当我使用“Java org/apache/poi/ss/usermodel/Sheet的NoClassDefFoundError Jar错误,java,noclassdeffounderror,Java,Noclassdeffounderror,我看到这个问题被问了很多次,但我仍然找不出解决办法。一个对我有效的解决方案。我有一个使用ApachePOI的项目,我确保包含所有外部JAR。该项目在eclipse中编译并运行良好,但当我使用“java-jar Test.jar”运行jar时,出现以下错误: 线程“main”java.lang.NoClassDefFoundError中出现异常:org/apache/poi/ss/usermodel/Sheet 我不确定这是否是有用的信息,但我为我的项目创建了一个lib文件夹,并将poi库放在其中
java-jar Test.jar
”运行jar时,出现以下错误:
线程“main”java.lang.NoClassDefFoundError中出现异常:org/apache/poi/ss/usermodel/Sheet
我不确定这是否是有用的信息,但我为我的项目创建了一个lib文件夹,并将poi库放在其中。这意味着当我创建JAR文件时,依赖项就在JAR文件中,我想我应该提到这一点,因为我看到了一些解决方案,就是将外部JAR放在可执行JAR旁边。我还尝试将我的类路径设置为项目的目录
我似乎做错了什么?您需要在Jar文件的清单文件中提供类路径 示例 我们希望将MyUtils.jar中的类加载到类路径中,以便在MyJar.jar中使用。这两个JAR文件位于同一目录中 我们首先创建一个名为
Manifest.txt
的文本文件,其内容如下:
Class-Path: MyUtils.jar
您需要在Jar文件的清单文件中提供类路径 示例 我们希望将MyUtils.jar中的类加载到类路径中,以便在MyJar.jar中使用。这两个JAR文件位于同一目录中 我们首先创建一个名为
Manifest.txt
的文本文件,其内容如下:
Class-Path: MyUtils.jar
不在运行时类路径上。使用manifest.MF
文件中的以下清单条目重新生成Test.jar
Class-Path: poi-3.9-20121203.jar
不在运行时类路径上。使用manifest.MF
文件中的以下清单条目重新生成Test.jar
Class-Path: poi-3.9-20121203.jar
当
java-jar[filename].jar命令失败时,几乎总是因为以下两个原因之一:
您的MANIFEST.MF出错,无法正确列出依赖项。确保清单文件中的所有jar依赖项都指向jar,相对于jar的父目录
在您的特定jar或您所依赖的jar中缺少.class文件。确保您的jar包含org/apache/poi/ss/usermodel/Sheet.class
,或者您的清单层次结构指向包含该类的jar
当java-jar[filename].jar命令失败时,几乎总是因为以下两个原因之一:
您的MANIFEST.MF出错,无法正确列出依赖项。确保清单文件中的所有jar依赖项都指向jar,相对于jar的父目录
在您的特定jar或您所依赖的jar中缺少.class文件。确保您的jar包含org/apache/poi/ss/usermodel/Sheet.class
,或者您的清单层次结构指向包含该类的jar
首先检查您的目标jar(Test.jar
)是否是包含所有必需依赖项的胖jar
$ jar tf Test.jar
您应该在那里看到lib/
文件夹,其中包含所有必需的依赖项(包括apachepoi)。如果是这种情况,请按照其他人的建议,将ApachePOI添加到您的MANIFEST.MF
关于将jar依赖项放在单独的文件夹中,正如您所建议的,这也是可能的。想象一下,您的依赖项存储在Test.jar
之外的lib/
文件夹中。您可以使用以下命令运行代码:
$ java -cp ".:lib/*" org.Test.Main
它只是将lib/文件夹中的所有.jar添加到类路径中。在这种情况下,您还需要指定主类的名称(全名)。首先检查您的目标jar(Test.jar
)是否是包含所有必需依赖项的胖jar
$ jar tf Test.jar
您应该在那里看到lib/
文件夹,其中包含所有必需的依赖项(包括apachepoi)。如果是这种情况,请按照其他人的建议,将ApachePOI添加到您的MANIFEST.MF
关于将jar依赖项放在单独的文件夹中,正如您所建议的,这也是可能的。想象一下,您的依赖项存储在Test.jar
之外的lib/
文件夹中。您可以使用以下命令运行代码:
$ java -cp ".:lib/*" org.Test.Main
它只是将lib/文件夹中的所有.jar添加到类路径中。在这种情况下,您还需要指定主类的名称(全名)。我也遇到了这个问题,并尝试用谷歌搜索它
我发现我必须阅读错误日志
我无法将文件保存到.xls,因此
在我的例子中,在阅读错误后,我发现缺少一个jar文件
我刚刚添加了jar文件poi-3.7-20101029,该文件位于我的ireport的ext文件夹中
例如:yourreportfolder/ireport/modules/ext-poi.x.x-xxxx
希望这有帮助:)我也遇到了这个问题,并尝试用谷歌搜索它
我发现我必须阅读错误日志
我无法将文件保存到.xls,因此
在我的例子中,在阅读错误后,我发现缺少一个jar文件
我刚刚添加了jar文件poi-3.7-20101029,该文件位于我的ireport的ext文件夹中
例如:yourreportfolder/ireport/modules/ext-poi.x.x-xxxx
希望这有帮助:)我尝试了这个,但仍然得到相同的错误。这是我放在清单类路径中的内容:lib/poi-3.9/poi-3.9-20121203.jar我仍然使用“java-jar Test.jar”运行我的jar。看起来不错,请检查清单文件末尾是否有换行符。还要检查清单是否正确包含(通过将其取消归档到临时文件夹)。最后检查poi jar文件的路径是否正确。我已取消连接并检查MANIFEST.MF文件。该文件包含在内,它有一个换行符,我非常确定路径是正确的。类路径是来自清单文件还是来自项目目录?类路径是相对于运行jar的位置的。谢谢,我是个白痴。我的代码