使用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文件等,而不是手工操作。