【问题标题】:Creating jar file with manifest and audio and image folders including external jars使用清单和音频和图像文件夹创建 jar 文件,包括外部 jar
【发布时间】: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 .

标签: java jar


【解决方案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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2013-09-28
      • 1970-01-01
      • 1970-01-01
      • 2019-03-08
      • 2014-10-28
      • 1970-01-01
      • 2014-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多