在 Java 代码中运行可执行 jar 文件时"Could find or load main class"



使用windows 10中命令提示符中的命令将我的java程序转换为可执行的jar文件后,在执行jar文件时,我收到错误:

无法找到或加载主类Combine.class"导致通过:java.lang.ClassNotFoundException:Combine.class

我的jdk-11.0.1有javamailapi和excelapi。在执行时,我将类路径设置为:

classpath=%classpath%;C:Program FilesJavajdk-11.0.1javamail_apijavax.mail-1.6.2.jar;C:Program FilesJavajdk-11.0.1javamail_apiactivation.jar;C:Program FilesJavajdk-11.0.1jexcelapijxl.jar;.;

它正在正确编译和执行,但在转换为可执行的jar文件后,它没有运行,并给出了上述错误。

如有任何帮助,我们将不胜感激。谢谢

线索在异常消息中。它正在尝试加载一个名为Combine.class的类。但类的真实名称是Combine

您创建的JAR文件不正确。

echo Main-Class: Combine.class > manifest.txt 
jar cmf manifest.txt FinalExecutable.jar Combine.class 

如果Combine在默认包中(即它没有package语句),那么上面应该是:

echo Main-Class: Combine > manifest.txt 
jar cmf manifest.txt FinalExecutable.jar Combine.class 

如果Combine是在包foo.bar中声明的,那么上面应该是.

echo Main-Class: foo.bar.Combine > manifest.txt 
jar cmf manifest.txt FinalExecutable.jar foo/bar/Combine.class

并且您需要位于foo目录上方的目录中。

NB:;主要类别";清单中的属性必须是Java完全限定类名,而不是文件名或文件路径名。

还应该注意的是,当您使用java -jar ...运行JAR时,CLASSPATH环境变量和-cp参数将被忽略。如果您的可执行JAR依赖于其他JAR文件,那么您应该将它们组合起来(创建一个着色JAR),或者添加一个";类路径";清单的属性;看见https://docs.oracle.com/javase/tutorial/deployment/jar/downman.html

最后,我的建议是使用构建工具(例如Maven)来编译代码、创建可执行JAR文件等,而不是手工操作。

相关内容

最新更新