无法在.jar文件中找到或加载主类

时间:2018-05-22 11:44:37

标签: java jar manifest

一直在寻找解决我问题的大约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

两者都产生错误,“错误:无法找到或加载主类game.gameRun” 但是,当我解压缩jar文件时,在bin / game目录中我可以看到gameRun.class文件,在META-INF \ MANIFEST.MF文件中我仍然可以看到Main-Class设置为game.gameRun。

请注意,我正在命令行上运行远程Linux服务器,即使我将它下载到我的Windows 10计算机上,jar文件也不起作用。

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

1 个答案:

答案 0 :(得分:1)

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

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

如果你从bin文件夹制作jar,你会看到:META-INF和游戏,它会起作用。

它并不适合你,因为它无法找到主类,因为它在bin / game / YourClass.class中,而不是在game / YourClass.class中。

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

然后只是:

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