java.lang.NoSuchMethodError: java_cup.runtime.lr_parser.getSymbolFactory()Ljava_cup/runtime/SymbolFactory

java.lang.NoSuchMethodError: java_cup.runtime.lr_parser.getSymbolFactory()Ljava_cup/runtime/SymbolFactory

我刚开始使用 JFlex 的一个项目,当我尝试使用 ant 编译该项目时,出现以下错误:

java.lang.NoSuchMethodError: java_cup.runtime.lr_parser.getSymbolFactory()Ljava_cup/runtime/SymbolFactory

这是什么原因造成的?我下载了 JFlex jar,并在我的项目中使用它。

原来要用jflex蚂蚁任务,你需要download JFlex from here,解压到某个地方,然后将jflex-1.6.1/lib/*文件复制到你的ant/lib/文件夹,然后再试一次。

我在 IntelliJ 的同一个项目中同时使用 JFlex.jarcup_v10k.jar 时遇到了同样的问题。

问题出在cup_v10k.jar,其中java_cup.runtime.lr_parserclass也存在,getSymbolFactory()的方法不存在class。

IntelliJ 在搜索 lr_parser class 时不知道要信任哪个 jar,并选择了字典顺序第一个 jar - cup_v10k.jar

我的 solution/hack 是将 cup_v10k.jar 重命名为 JFlex.jar 之后的字典顺序,例如 zcup_v10k.jar。然后 IntelliJ 能够找到正确的 lr_parser class.