Java 类在类路径中时发生ClassDefNotFoundError

Java 类在类路径中时发生ClassDefNotFoundError,java,classpath,antlr,antlr3,classnotfoundexception,Java,Classpath,Antlr,Antlr3,Classnotfoundexception,我想跑。根据文档,它要求ant、prefuse和antlrjar在其lib目录中可用。我已经把所有需要的罐子都放进去了。但是,当我尝试运行它时,会出现以下错误: Exception in thread "main" java.lang.NoClassDefFoundError: antlr/TokenStreamException at de.parsemis.miner.environment.Settings.parseFileName(Settings.java:198)

我想跑。根据文档,它要求
ant
prefuse
antlr
jar在其
lib
目录中可用。我已经把所有需要的罐子都放进去了。但是,当我尝试运行它时,会出现以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: antlr/TokenStreamException
    at de.parsemis.miner.environment.Settings.parseFileName(Settings.java:198)
    at de.parsemis.miner.environment.Settings.parseOption(Settings.java:312)
    at de.parsemis.miner.environment.Settings.parse(Settings.java:170)
    at de.parsemis.miner.environment.Settings.parse(Settings.java:122)
    at de.parsemis.Miner.run(Miner.java:358)
    at de.parsemis.Miner.main(Miner.java:61)
Caused by: java.lang.ClassNotFoundException: antlr.TokenStreamException
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    ... 6 more

现在,我已经验证了
antlr
jar中存在
antlr/TokenStreamException.class
。我已经尝试通过导出
classpath
变量并通过
-cp
开关设置它来手动将jar添加到类路径中。然而,这些都不起作用,我仍然得到这个例外。有谁能帮我弄清楚出了什么问题吗?谢谢。

问题在于您使用的是忽略CLASSPATH环境变量的
-jar
。您应该在清单中列出您的依赖项,例如


(但是,它应该仍然使用显式的
-cp
选项。我猜您在指定该选项时出错了,并假设它与使用环境变量时的失败是相同的根本原因。)

我意识到这个问题很老,但我只是有完全相同的问题,发现了这个线程。对于子孙后代,我将发布我最终是如何让它运行的:

如上所述,当使用-jar运行时,java显然会忽略类路径。所以不要用-jar运行它。而是在路径中包含JAR并直接运行该类。随便看看,以下应该可以工作(路径在我的Ubuntu 12.10系统上):

然后,您可以将选项传递给上面的。也许你确定你使用了完整的路径,没有像~/foo这样的快捷方式,因为它们显然不会扩展


当然,如果你像我一样使用点格式的图形,它在抱怨“意外字符0xA”时很早就消失了,但至少它会更进一步。

你如何运行你的应用程序?请提供你在
WEB-INF/lib
文件夹中拥有的内容。您缺少jar文件…@JonSkeet我正在使用以下命令运行jar:
java-jar parsemis-2008-12-01.jar--graphFile=graph.dot--minimumFrequency=4
@FahimParkar err这不是web应用程序。我有一个包含以下内容的lib目录:
ant.jar
antlr-3.4-complete.jar
prefuse.jar
@KG:好的,我想可能就是它了-请看我的答案。清单中的
类路径
是最好的。确保用空格分隔不同的.jar,而不是
或其他任何东西。@sobolan有趣。我不知道-jar会忽略类路径。但是我应该把这个变量放在什么清单中呢?parsemis?@KG
的jar文件parsemis?
的jar文件。是。@KG:是的,您正在运行的jar文件。@sobolan好的,我更新了parsemis jar中的清单。我已经验证了新清单包含jonskeet描述的类路径设置。我仍然会犯同样的错误。
Class-Path: lib/ant.jar lib/antlr-3.4-complete.jar lib/prefuse.jar
java -cp /usr/share/java/antlr.jar:/full/path/to/parsemis.jar de.parsemis.Miner