无法在 .jar 文件中找到或加载 main class

Can't find or load main class, in a .jar file

找了大约 2 个小时来解决我的问题,尝试了无数的解决方案,但问题仍然没有解决。

我有一个游戏项目,包很少;几何、关卡、装饰和游戏。游戏包内有一个 gameRun.java

package game;
public class gameRun {

/**
 * Program entry point.
 * @param args the arguments for the levels
 */
public static void main(String args[]) {
    ... some code
}
}

我有以下清单文件:

Main-Class: game.gameRun
Class-Path: someExternalGraphicTool.jar
//newline here

我使用以下命令编译我的整个游戏:(bin 文件夹已经存在)。

  javac -d bin src/geometry/*.java src/decoration/*.java src/levels/*.java src/game/*.java

然后我使用以下命令将已编译的 类 转换为可执行的 .jar 文件:

jar cvfm t.jar manifest.mf bin/geometry/*.class bin/decoration/*.class bin/levels/*.class bin/game/*.class 

然后我尝试 运行 我的 t.jar 使用:

java -jar t.jar 
//or 
java -cp .:t.jar game.gameRun

两者都会产生错误,"Error: Could not find or load main class game.gameRun" 但是,当我解压缩 jar 文件时,在 bin/game 目录中我可以看到一个 gameRun.class 文件,在 META-INF\MANIFEST.MF 文件中我仍然可以看到 Main-Class 设置为 game.gameRun.

请注意,我在远程 linux 服务器上工作,在命令行上,即使我将 jar 文件下载到我的 windows 10 机器上,jar 文件也不起作用。

在这个过程中我做错了什么?感谢您的帮助。

由于 bin 文件夹,您的 classes 在 jar 文件中的结构错误。我的建议:将其全部打包到一个 jar 中,从 bin 文件夹开始。

现在,当您提取 jar 时,您将看到 2 个文件夹:META-INF 和 bin。

如果您从 bin 文件夹中制作 jar,您将看到:META-INF 和游戏,它会工作。

它根本不适合你,因为它找不到主要的 class,因为它在 bin/game/YourClass.class 中,而不是 [=31] =].class.

...\bin> jar cvfm t.jar manifest.mf geometry/*.class decoration/*.class levels/*.class game/*.class

然后就是:

...\bin> java -jar t.jar