Jar文件给出了java.lang.NoClassDefFoundError

我有一个Eclipse项目,当我在Eclipse中运行它时运行正常。 我在Eclipse中创建了一个Jar文件。 但是当我使用以下命令运行它时:

D:\Java\projects\fetch>java -Xss1000m -XX:-UseGCOverheadLimit -Xmx5048m -jar bin\fetch.jar 

我收到以下错误:

 Exception in thread "main" java.lang.NoClassDefFoundError: info/monitorenter/cpdetector/io/ICodepageDetector at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Unknown Source) at java.lang.Class.getMethod0(Unknown Source) at java.lang.Class.getMethod(Unknown Source) at sun.launcher.LauncherHelper.getMainMethod(Unknown Source) at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source) Caused by: java.lang.ClassNotFoundException: info.monitorenter.cpdetector.io.ICodepageDetector at java.net.URLClassLoader$1.run(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) ... 6 more 

jar的内容是:

 com (folder) dist (folder) doc (folder) lib (folder, contains all the jars, including the cpdetector jar) META-INF (folder) resources (folder) sources (folder) .classpath (file) .project (file) hibernate.cfg.xml (file) log4j.xml (file) 

.classpath文件的内容是:

                                                                                

我已经google了java.lang.NoClassDefFoundError,并且已经尝试了很多东西,但它们都没有用。 欢迎所有建议。 谢谢。

在命令行上运行java时,必须提供类路径。

 java -cp lib/commons-fileupload-1.2.2.jar;...... 

或者你在eclipse(Launch Configuration)中运行它,eclipse为你提供了类路径。 .classpath文件是一个eclipse工件,因此只能被eclipse识别。

或者你可以使用eclipse的runnable jar导出Export -> Runnable Jar File 。 确保在导出对话框的“库处理”部分中选择了“将所需库提取到生成的JAR”。

作为jar运行时,需要指定类路径,如下所示:

 java -cp libOne.jar;libTwo.jar;... -jar myJar.jar 

或者,由于您执行了Eclipse导出,请选择export Runnable Jar 。 然后,您可以选择将Extract required libraries into generated JAR 。 如果这样做,请确保这些库的许可证允许您执行此操作。 然后,您不需要指定类路径。

像这样导出的jar更容易使用。