我目前正在尝试使用Slick和Maven构建一个简单的Java游戏。
我的设置基本上可以正常工作。但是当我将我的Main Class扩展为Slick“BasicGame”时,我再也无法执行jar了,请发出以下错误消息:
D:\workspace\GameTest\target>java -jar GameTest-1.0-SNAPSHOT.jar
Exception in thread "main" java.lang.NoClassDefFoundError: org/newdawn/slick/BasicGame
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.newdawn.slick.BasicGame
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 12 more
Could not find the main class: gameTest.MyGame. Program will exit.
在我这样做之前,一切都执行得很好。 Pom.xml是从here复制的。
MyGame类看起来像这样: ... 进口 ...
public class MyGame extends BasicGame {
...
empty implementations of BasicGame Methods
...
public static void main(String[] args){
System.out.println("Hello World");
}
}
有谁知道这个错误发生的原因?
答案 0 :(得分:1)
有谁知道为什么会出现这种错误?
当您切换到使用可执行jar时,您创建了一种情况,其中依赖库 - slick.jar - 不再位于类路径中。一切都开始了,因为MyGame在你的jar文件中。但MyGame扩展了BasicGame,它不在你的jar文件中。它在slick.jar中,你的java命令不引用slick.jar。
不知何故,您必须将所有依赖项重新放回到类路径中。有关详细信息,请查看相关问题Is it possible to create an "uber" jar containing the project classes and the project dependencies as jars with a custom manifest file?
刚检查了你的pom.xml文件 - 你还必须将lwjgl和vecmath集成到你的类路径中。