Java 运行jar时获取运行时异常

Java 运行jar时获取运行时异常,java,exception,jar,executable,Java,Exception,Jar,Executable,我创建了一个jar文件,其中包含一个主类及其依赖的jar。 我编写了自己的清单,以便也可以包含依赖项。 当我试图运行jar文件时,问题就出现了;它给了我以下信息: Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/ss/usermodel/Workbook 下面是文件夹结构 ExcelCopy.jar | |-com/utility/ExcelFormat.java | |-lib/poi-3.9

我创建了一个jar文件,其中包含一个主类及其依赖的jar。 我编写了自己的清单,以便也可以包含依赖项。 当我试图运行jar文件时,问题就出现了;它给了我以下信息:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/ss/usermodel/Workbook
下面是文件夹结构

ExcelCopy.jar
|
|-com/utility/ExcelFormat.java
|
|-lib/poi-3.9.jar
|
|-META-INF/Manifest.mf
Manifest.mf内容

Manifest-Version: 1.0
Class-Path: lib/poi-3.9jar
Created-By: 1.7.0_25 (Oracle Corporation)
Main-Class: com.utility.ExcelFormat

您不需要在ExcelCopy.jar中绑定lib/poi-3.9.jar。将其从罐子中取出,您将拥有:

ExcelCopy.jar
|
|-com/utility/ExcelFormat.java
|-META-INF/Manifest.mf
那么你有:

ExcelCopy.jar
lib/poi-3.9jar

运行“java-jar ExcelCopy.jar”应该可以工作。

Thanx@suang。我尝试了简单的逻辑,它成功了 我从poi-3.9.jar中提取了所需的类,因此现在我有了一个文件夹调用
org
,其中包含了所有所需的类

ExcelCopy.jar
|
|----com/utility/ExcelFormat.java
|
|----org/apache(long dir structure)
|
|----META-INF/Manifest.mf
以及
Manifest.mf的内容

Manifest-Version: 1.0
Class-Path: org
Main-Class: com.utility.ExcelFormat

现在我的罐子在运转D

如果需要,请告诉我您的
Manifest.txt
是什么样子的?另外,它应该被重命名为
MANIFEST.MF
。很抱歉输入错误,我已经发布了MANIFEST文件的内容。。请看一下,但是ExcelFormat类使用的是poi-3.9.jar。如果我将其从jar中删除,那么类将如何运行?请将其放在ExcelCopy.jar之外。在我的项目中,我使用了很多第三方库,通常在您自己的JAR之外引用它们。在您的文件系统中,您将有如下内容:c:\mydir\ExcelCopy.jar c:\mydir\lib/poi-3.9jar,然后从c:\mydir运行“java-jar ExcelCopy.jar”。相对路径是在MANIFEST.shuang的类路径中指定的。现在,当前文件夹结构是d:/ExcelCopy.jar d:/lib/poi-3.9.jar,但我仍然得到相同的错误尝试java-cp-jar ExcelCopy.jar。这是为了将类路径指定为您执行JAR的当前文件夹。如果这样做没有帮助,请验证您的poi-3.9.jar是否包含找不到的类。虽然这样做有效,但我强烈建议使用Shuang提供的解决方案。它更整洁,因为您的类被打包在您自己的Jar文件中,并且所有必要的依赖Jar文件都被单独引用,而没有混合任何内容。如果您想将所有这些打包到一个文件中,只需对封闭的文件夹进行tar或zip压缩即可。