Java 程序在 IDE 内运行,但在编译 (eclipse) 后给出 java.lang.NoClassDefFoundError

Java program works within IDE, but after compiling (eclipse) gives a java.lang.NoClassDefFoundError

参考库结构:(我设法做到的,在 IDE 中运行良好)

堆栈跟踪:

Exception in thread "main" java.lang.NoClassDefFoundError: org/newdawn/slick/SlickException
    at com.gametest.game.GameLauncher.main(GameLauncher.java:61)
Caused by: java.lang.ClassNotFoundException: org.newdawn.slick.SlickException
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 1 more

基本上我使用 slick 和 LWJGL 来使音频正常工作,在 IDE 中它运行良好(配置构建路径,选择 lwjgl 的本机),但是在编译和 运行 时,它崩溃并在控制台中给出上面的堆栈跟踪。

我是运行64位macosx,代码编写编译在eclipse中。使用的库:lwjgl、slick (http://slick.ninjacave.com/)

运行 来自 "Terminal" 控制台使用:

java -cp ~/Desktop/FirstGame.jar com.gametest.game.GameLauncher

这似乎是一个常见的错误,但在网上搜索了很多时间后,我还没有找到解决它的答案。

(编辑) 涉及:ERROR!! AppGameContainer java.lang.ClassNotFoundException

我认为您遇到了第三方库的问题,这些库未包含在您的 jar 中(但它们可以在您的 IDE 项目的类路径中找到,这就是它在那里工作的原因)。

您可以将任何第三方 jar 放入 jar 旁边的 /lib 目录并使用 -cp JVM 参数。 或者您可以尝试使用 http://one-jar.sourceforge.net/、"maven-shade-plugin" Maven 构建工具插件等工具

是否 FirstGame.jar 一个包含所有库的罐子?如果没有,您需要将所有需要的 jar 文件添加到类路径中。

类似于java -cp ~/Desktop/FirstGame.jar;lib/*" com.gametest.game.GameLauncher

似乎 eclipse 找不到包含在 Slick 中的 org.newdawn.slick.SlickException class。或者您没有将 Slick.JAR 文件添加到正确的位置,或者您的 class 路径设置不正确。

尝试在您的构建路径中添加此 slickJar 它应该可以解决您的问题

我做到了 (我为自己感到骄傲,我自己弄清楚了,使用了一些文档和我的一些大脑)

有时候,你需要别人的一点推动才能让自己达到顶峰。

我基本上通过进入 MANIFEST.MF 并添加一行来修复它:

以及将所有 jar 文件(和二进制文件)移动到一个名为 "Game"

的文件夹中

如果正确完成,它看起来像这样: