我刚开始处理的一个项目使用 JFlex,当我尝试使用 ant
编译项目时,出现以下错误:
java.lang.NoSuchMethodError: java_cup.runtime.lr_parser.getSymbolFactory()Ljava_cup/runtime/SymbolFactory
这是什么原因造成的?我已经下载了 JFlex jar,并且正在我的项目中使用它。
原来要使用 jflex
ant 任务,您需要从这里下载 JFlex,将其解压缩到某个地方,然后将jflex-1.6.1/lib/*
文件复制到您的 ant/lib/
文件夹中,然后重试。
IntelliJ 的同一项目中同时使用 JFlex.jar
和 cup_v10k.jar
时,我遇到了同样的问题。
问题出在cup_v10k.jar
,其中java_cup.runtime.lr_parser
类也存在,而方法getSymbolFactory()
在该类中不存在。
IntelliJ 在搜索 lr_parser
类时不知道该信任哪个 jar,并选择了按字典顺序排列的第一个 jar - cup_v10k.jar
。
我的解决方案/技巧是在 JFlex.jar
之后将cup_v10k.jar
重命名为按字典顺序命名的内容,例如 zcup_v10k.jar
。然后,IntelliJ能够找到合适的lr_parser
类。