【问题标题】:Java -jar ERROR: could not find or load main classJava -jar 错误:找不到或加载主类
【发布时间】:2015-11-04 18:29:32
【问题描述】:

我正在制作一个 2d 游戏,我已将其编译为 .jar 以测试它是否有效。 使用 java -jar 命令运行 jar 文件时,出现以下错误:

Error: Could not find or load main class com.grizeldi.splatoon.Main

我知道 StackOveflow 上有很多解决方案,但我尝试更新 java,弄乱 -cp... 到目前为止没有任何效果。

代码:github repo

帮助任何人?

EDIT1:我的代码在 U 盘上,但我尝试将其移至 C: 和 D:,但没有任何效果。 EDIT2:我在 github 上添加了 .jar。

【问题讨论】:

  • 是的,我的清单没问题。主类属性就在那里。
  • 罐子里的内容是什么? (unzip -ljar -t
  • 在 jar 的根目录中是 META-INF 和 com 映射。在 com 中还有其他包。
  • 你的 Main 类在 com/grizeldi/splatoon/Main.class 的 jar 中吗?
  • 还有其他错误吗?也许是堆栈跟踪?可能是缺少依赖类。也许BasicGame 来自org.newdawn?将包含该包的 jar 添加到您的类路径中,然后它可能会起作用。

标签: java runtime classloader executable-jar


【解决方案1】:

一种方法是使用类路径将清单更新到其他 jar:

Class-Path: lib.jar

另一种方法是将您的主 jar 依赖的 jar 的内容添加到您的主 jar 中,这样您就只有一个 jar 文件。确保不要将罐子本身添加到主罐子中,因为嵌套罐子不起作用。

在处理原生库(.so.dll)时,只需将它们放在与 jar 相同的目录中即可。这样做的缺点是您有多个文件。 在这种情况下,最简单的方法可能是添加一个启动脚本(.sh.bat),指定 Main 的类路径和类名,以及 -Djava.library.path

还有另一种方法:在运行时从 jar 中提取原生库,将其保存到临时位置,然后显式加载。有关更多信息,请参阅here

【讨论】:

  • 我将所有 jars 放在一个文件夹中(libs + splatoon2D.jar)。这应该有效吗?
  • -jar 文档说,当它被使用时,我认为 -cp 被忽略了
  • 我不这么认为;如果我运行java,它会显示... or java [-options] -jar jarfile。如果您想要 jar 文件中的所有内容,则必须解压缩库并将内容添加到您的 jar 中。
  • 希望这个工作 ;-) 很抱歉造成混乱!
  • 没关系;)。如果我只是将 lib jar 添加到我的 splatoon jar 中可以吗?因为那行不通。
猜你喜欢
  • 2021-06-06
  • 2014-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-30
  • 2016-12-17
相关资源
最近更新 更多