我写了一个java程序,准备导出它了。我从Eclipse制作了一个可运行的jar。运行jar在我的计算机上运行正常,但在任何其他计算机(包括我编写Java的其他计算机)上抛出“找不到主类”错误。
每当我搜索其他有问题的人时,答案总是一样:检查清单文件。我没有看到我的任何问题(另外,无法想象为什么它会在我的电脑上工作而不是其他人的工作)
清单:
Manifest-Version: 1.0
Main-Class: my.quick.monster.QuickMonster
我也尝试过:
Manifest-Version: 1.0
Class-Path: .
Main-Class: my.quick.monster.QuickMonster
两者都适用于我,但不适用于其他计算机。
答案 0 :(得分:3)
考虑可能出错的事情,以下是其他一些要检查的事项:
java -version
进行检查。java -jar foo.jar
而不是java -cp foo.jar
。(一种理论认为JAR正在使用清单上的一台机器;例如,它是通过CLASSPATH环境变量中的类路径找到类的。)
总结一下其他人,OP的问题是他用Java编译了他的代码,并试图在较旧的Java安装上运行JAR。由于classfile版本号,这不起作用。
您可以编译代码以便它可以在较旧版本的Java上运行,但是在编译时需要使用-target
选项,并且应该< / em>使用-bootclasspath选项从最早的Java版本编译rt.jar
。典型的IDE将通过允许您指定目标构建平台来简化此操作,但是在不使用IDE的情况下,理解技术细节是值得的。
(我很惊讶java
命令没有提到错误消息中的类文件版本号...)
答案 1 :(得分:0)
确保MANIFEST.MF文件末尾包含空行。如果Main-Class
定义位于文件的最后一行,则某些类加载器会忽略它。
答案 2 :(得分:-4)
不要使用'eclipse-jar-working-fine-my-my-computer'。我使用maven shade jar插件,它可以很好地构建一个可以运行的jar,包含所有依赖项,指定的主类等。
编辑: eclipse-builded-jar的错误在于你无法用它来构建它。 Maven是广泛用于构建任何类型包的常用工具。它是自动化的,意味着它可以在CI环境等中使用。优秀开发人员的目标是编写代码,以便可以轻松地将其移动到CI。
然而,如果这不是一项常规任务,假设只做一次/两次,也许,'eclipse'解决方案也有一些好处。但是,我回答了一些过去的情况,当时人们在GUI中构建软件包只是因为他们没有设法在maven中完成它。
所以,我希望maven vs eclipse有足够的论据,所以请停止downvote:D