我在程序中使用了两个jar 包, 然后MANIFEST.MF 文件时这样写的:
Manifest-Version: 1.0
Main-Class: com.sqlite.browser.view.MainFrame
Class-Path: ./forms-1.1.0.jar ./sqlitejdbc.jar这两个jar 文件放在了打出来的jar 文件同级目录下, 但是运行的时候, 报异常:
java.lang.NoClassDefFoundError: com/jgoodies/forms/layout/FormLayout
at com.sqlite.browser.panel.DataBaseStructurePanel.<init>(DataBaseStructurePanel.java:60)
at com.sqlite.browser.view.MainFrame.createContents(MainFrame.java:157)
at com.sqlite.browser.view.MainFrame.<init>(MainFrame.java:86)
at com.sqlite.browser.view.MainFrame$1.run(MainFrame.java:72)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: com.jgoodies.forms.layout.FormLayout
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)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
... 12 more请问是我的MANIFEST.MF 文件写的问题吗? 一般这样打包, 要用到的jar 包应该如何处理?
Manifest-Version: 1.0
Main-Class: com.sqlite.browser.view.MainFrame
Class-Path: ./forms-1.1.0.jar ./sqlitejdbc.jar这两个jar 文件放在了打出来的jar 文件同级目录下, 但是运行的时候, 报异常:
java.lang.NoClassDefFoundError: com/jgoodies/forms/layout/FormLayout
at com.sqlite.browser.panel.DataBaseStructurePanel.<init>(DataBaseStructurePanel.java:60)
at com.sqlite.browser.view.MainFrame.createContents(MainFrame.java:157)
at com.sqlite.browser.view.MainFrame.<init>(MainFrame.java:86)
at com.sqlite.browser.view.MainFrame$1.run(MainFrame.java:72)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: com.jgoodies.forms.layout.FormLayout
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)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
... 12 more请问是我的MANIFEST.MF 文件写的问题吗? 一般这样打包, 要用到的jar 包应该如何处理?
改成
Class-Path: forms-1.1.0.jar sqlitejdbc.jar
试试
打包清单.它是打包的关键性文件,主要是设置执行入口类和支持库的路径,在运行java应用程序时要根据此文件中给出的信息来查找入口类和支持库.
我们以前只注意了MANIFEST.MF中的入口类,也就是我们常说的主类(有main方法的类),却忽视了支持库.
Class-Path:指定支持库的路径,"."指程序运行目录,即到处的jar包所在目录.程序运行时依据Class-Path项的设置路径来查找支持库.每一个支持库之间用空格格开.
后来我自己用到的jar,放一个文件夹lib,lib就放在和jar包一个文件夹下,清单文件这样写
Manifest-Version: 1.0
Main-Class: awt.MyGuiImp
Class-Path: ./lib/jacob.jar ./lib/jdom.jar ./lib/log4j.jar
移到别的计算机,运行jar,就不会出现任何问题了,前提是该计算机必须装jdk.