繁体   English   中英

在 Java 代码中运行可执行 jar 文件时“可以找到或加载主类”

[英]"Could find or load main class" while running executable jar file in Java code

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

可以找到或加载主类 Combine.class” 引起:java.lang.ClassNotFoundException:Combine.class

我的 jdk-11.0.1 有 javamail api 和 excelapi.While 执行我已将我的类路径设置为:

classpath=%classpath%;C:\Program Files\Java\jdk-11.0.1\javamail_api\javax.mail-1.6.2.jar;C:\Program Files\Java\jdk-11.0.1\javamail_api\activation.jar;C:\Program Files\Java\jdk-11.0.1\jexcelapi\jxl.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目录上方的目录中。

注意:清单中的“Main-Class”属性必须是 Java 完全限定的类名,而不是文件名或文件路径名。

还应该注意的是,当您使用java -jar ...运行 JAR 时,将忽略CLASSPATH环境变量和-cp参数。 如果您的可执行 JAR 依赖于其他 JAR 文件,您应该将它们组合起来(以创建阴影 JAR),或者您应该向清单添加“Class-Path”属性; https://docs.oracle.com/javase/tutorial/deployment/jar/downman.html

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM