【发布时间】:2012-06-13 02:51:50
【问题描述】:
我正在尝试创建一个 jar 文件 有以下项目内容
- 项目
- user_interface(包文件夹包括所有与GUI相关的.classes)
- function_operations(包文件夹包括所有与操作相关的.classes)
- 声音(文件夹包括所有声音文件)
- 图标(包括所有图片和图标)
- jars(包括所有外部 jar 文件)
- manifest.txt(有一行 *Main-Class: user_interface.messengerGUI* 和两个输入)
我正在使用命令
jar cvfm helloBuddy.jar manifest.txt user_interface/*.class function_operations/*.class icons/ sounds/
成功创建jar文件,但执行时出现以下错误
JAI-MATA-DI-LINUX 项目#java -jar helloBuddy.jar 中的异常 线程“主”java.lang.NoClassDefFoundError: user_interface/messengerGUI 原因: java.lang.ClassNotFoundException: user_interface.messengerGUI at java.net.URLClassLoader$1.run(URLClassLoader.java:217) 在 java.security.AccessController.doPrivileged(Native Method) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:205) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:321) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:266) 找不到 主类:user_interface.messengerGUI。程序将退出。
另一个问题是如何包含外部 jars?
编辑:终于成功地形成了 jar。使用 eclipse 我可以创建 jar 文件。但是当我运行它会给出以下错误
线程“主”java.lang.NoClassDefFoundError 中的异常: org/jivesoftware/smack/ChatManagerListener 原因: java.lang.ClassNotFoundException: org.jivesoftware.smack.ChatManagerListener 在 java.net.URLClassLoader$1.run(URLClassLoader.java:217) 在 java.security.AccessController.doPrivileged(Native Method) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:205) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:321) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:266) 找不到 主类:user_interface.messengerGUI。程序将退出。
我在项目中包含了一些外部 jar 文件。 org/jivesoftware/smack/ChatManagerListener 这个类属于smackx.jar 文件之一。 所以这个错误是添加到项目中的外部 jar 文件。任何线索我该如何解决这个问题?
【问题讨论】:
-
我怀疑您的课程最终会出现在 Jar 的根目录中。
jar -tvf helloBuddy.jar的输出是什么?将其复制/粘贴到问题中作为编辑并使用代码格式。 -
请看一下我的这个answer,它可能会有所帮助,你没有以正确的方式添加你的包(.class 文件和图像)在我看来.jar 文件。您不能假设将单个类添加到 .jar 文件中,而是必须包含整个包,因此如果
user_interface是包含所有 .class 文件的包,则不要编写user_interface/*.class而是编写user_interface.