2

我正在尝试创建一个具有以下项目内容的 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 线程“main”中的异常 java.lang.NoClassDefFoundError: user_interface/messengerGUI 原因:java.lang.ClassNotFoundException: user_interface.messengerGUI at java.net.URLClassLoader$1。在 java.net.URLClassLoader.findClass(URLClassLoader.java:205) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:321) 的 java.security.AccessController.doPrivileged(Native Method) 运行(URLClassLoader.java:217)在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:266) 找不到主类:user_interface.messengerGUI。程序将会退出。

另一个问题是如何包含外部罐子?

编辑:终于成功地形成了罐子。使用 eclipse 我可以创建 jar 文件。但是当我运行它时会出现以下错误

线程“main”中的异常 java.lang.NoClassDefFoundError: org/jivesoftware/smack/ChatManagerListener 原因:java.lang.ClassNotFoundException: org.jivesoftware.smack.ChatManagerListener 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) at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 找不到主类:user_interface.messengerGUI。程序将会退出。

我在项目中包含了一些外部 jar 文件。org/jivesoftware/smack/ChatManagerListener 这个类属于smackx.jar 文件之一。所以这个错误是添加到项目中的外部 jar 文件。任何线索我该如何解决这个问题?

4

2 回答 2

1

除非您使用像jarclassloader这样的自定义类加载器或使用像 onejar 这样的工具否则您不能像这样嵌套 jar 文件。

于 2012-06-09T13:06:39.603 回答
1

试试这个,这是在eclipse中创建jar或runnable jar的方法,项目中的所有外部库都将包含在内

File -> Export-> Java ->Runnbale JAR file

Launch configuration : your Class containing the public static void main(String[] args)

Export destination : Target place

Library Handling:

Package required libraries into generated JAR

FINISH
于 2012-06-09T13:16:35.177 回答