找不到主类(在其他计算机上)

时间:2011-11-11 23:28:22

标签: java

我写了一个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

两者都适用于我,但不适用于其他计算机。

3 个答案:

答案 0 :(得分:3)

考虑可能出错的事情,以下是其他一些要检查的事项:

  • 确保行末没有虚假字符(制表符,空格)。
  • 检查主类实际上是否具有正确名称的JAR文件。
  • 在工作的机器上
  • ,尝试更改当前目录并查看它是否仍然有效。
  • 检查您是否在每台计算机上使用相同版本的Java。运行java -version进行检查。
  • 确保您将其作为可执行JAR运行;即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