我正在尝试运行 ParSeMiS 。根据文档,它需要在其 lib
目录中提供 ant
、prefuse
和 antlr
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/