java - 类在类路径中时出现 ClassDefNotFoundError

标签 java classpath antlr antlr3 classnotfoundexception

我正在尝试运行 ParSeMiS 。根据文档,它需要在其 lib 目录中提供 antprefuseantlr jar。我已经把所有需要的 jar 都放进去了。但是,当我尝试运行它时,出现以下错误:

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/TokenStreamException.class 存在于 antlr jar 中。我尝试通过导出 CLASSPATH 变量并通过 -cp 开关设置它来手动将 jar 添加到类路径中。然而,这些都不起作用,我仍然遇到这个异常。有人能帮我弄清楚出了什么问题吗?谢谢。

最佳答案

问题是您使用的 -jar 会忽略您的 CLASSPATH 环境变量。您应该在 list 中列出您的依赖项,as shown here ,例如

Class-Path: lib/ant.jar lib/antlr-3.4-complete.jar lib/prefuse.jar

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

关于java - 类在类路径中时出现 ClassDefNotFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9080280/

相关文章:

java - 找出 pentaho kettle 中的一个步骤需要哪些 Jars

eclipse - 如何在不遇到 java.lang.ClassNotFoundException 的情况下将 JAR 库添加到 WAR 项目?类路径与构建路径与/WEB-INF/lib

java - ANTLR 不匹配输入错误

java - Antlr 中的词法分析器模式

java - 使用 Antlr 解析单行 C 风格注释

javascript - Jquery、ajax 和 JSON : Parsing GET response fails, 但只是有时?

java - 具有测试范围的递归 Maven 依赖项

java - 如何使用 espresso 根据项目文本从 ListView 中单击项目?

Java 小程序 - 删除/忽略所有 cookie (JSoup)

java - JDBC 无法解析为 Eclipse 中的变量