我在执行项目的JAR文件后得到了NoClassDefFoundError。
使用Eclipse进行调试工作正常,但每当我使用Windows命令java -jar myproject.jar
时,我都会收到此错误,因为我安装了JDK 1.7。
使用Java 1.6工作正常。
这是错误日志:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Layout
at program.Main.main(Main.java:20)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Layout
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)
... 1 more
我用Google搜索但未能找到正确的解决方案。
我已经做了什么: -uninstall Java 1.7,安装1.6代替 - 检查类路径 -try在另一台计算机上(从中卸载Java 1.7之后) - 创建一个空项目,其中一个引用log4j库=>同样的问题
这是类路径文件:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con"path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
<classpathentry kind="lib" path="lib/RXTXcomm.jar"/>
<classpathentry kind="lib" path="lib/log4j-1.2.15.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>
你知道我还应该做些什么吗?
谢谢,
尼尔斯
编辑:如果我将项目导出为“可运行的JAR”而不是简单的“JAR”,则程序启动但无法使用我正在使用的另一个库(RxtxComm)。这是我得到的日志:java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver
EDIT2:我终于通过将rxtxSerial.dll放在Windows / system32文件夹中解决了最后一个问题。 但是,如果我将项目导出为JAR文件以及为什么我现在需要使用dll文件,我仍然不明白为什么它不再起作用。
答案 0 :(得分:2)
运行jar文件时,你确定log4j的jar在classpath中吗?检查:
你有一个CLASSPATH系统变量,其中包含log4j的jar所在的文件夹
启动jar
时,将该log4j jar文件夹作为参数传递java -jar yourJar.jar -classpath c:\ myLog4JJarFolder
更新:
根据Andrew Thompson的评论使用-jar参数会使你的-classpath参数无用(它将被忽略)。为了能够在命令行指定类路径,您还必须使用主类的完全限定名作为启动参数:
java -classpath "c:\dir1;c:\dir2" package.subPackage.MainClass
答案 1 :(得分:0)
除了上述内容之外,我还会检查一些事情:
确保已将所有资源打包在可执行JAR中。提取你的罐子,看看是否确保。
将jar添加到类路径中:
java -cp [jar here] main.java