0.错误堆栈
Caused by: java.lang.UnsupportedOperationException: java.io.InvalidClassException: org.antlr.v4.runtime.atn.ATN; Could not deserialize ATN with UUID 59627784-3be5-417a-b9eb-8131a7286089 (expected aadb8d7e-aeef-4415-ad2b-8204d6cf042e or a legacy UUID).
at org.antlr.v4.runtime.atn.ATNDeserializer.deserialize(ATNDeserializer.java:153)
at com.mizuho.spark.parser.SqlBaseLexer.(SqlBaseLexer.java:1183)
… 20 more
Caused by: java.io.InvalidClassException: org.antlr.v4.runtime.atn.ATN; Could not deserialize ATN with UUID 59627784-3be5-417a-b9eb-8131a7286089 (expected aadb8d7e-aeef-4415-ad2b-8204d6cf042e or a legacy UUID).
… 22 more
1.解决
看报错说antlr.v4.runtime
这个类无效,第一反应是版本问题。
查了查发现说:报错的具体原因是antlr在运行的时候会校验通过.g4文件生成的编译器和执行时的antlr版本是否一致
我在idea中用antlr插件对XX.g4文件编译,但idea的antlr插件版本1.16版本支持Antlr 4.9.1,但我maven依赖的是Antlr4.5.3。
所以解决也很简单
- 改maven依赖的antlr的版本和idea插件的版本一致
- 也可以使用命令行编译.g4文件生成class。确定maven版本后,去github找对应antlr jar包手动命令行编译。
java -jar antlr-4.9.1-complelte.jar XXX.g4