Java运行ANTLR4项目初始化主类报错NoClassDefFoundError: ParseTree
问题原因
java.lang.NoClassDefFoundError: org/antlr/v4/runtime/tree/ParseTree属于典型的编译期有ANTLR依赖、但运行时缺少ANTLR4 Runtime依赖的问题,和代码导入逻辑无关。
常见触发原因如下:
- 手动管理依赖场景:仅导入了ANTLR4代码生成工具jar,未将
antlr4-runtime.jar加入运行时类路径 - Maven/Gradle构建场景:依赖声明时错误给ANTLR Runtime添加了
provided/testscope,导致打包/运行时不会带入该依赖 - IDE直接运行场景:项目依赖库中未将ANTLR Runtime标记为「导出到运行时」,或模块依赖配置错误
解决方案
按你使用的项目管理方式对应操作即可:
场景1:手动管理jar包
- 下载和你生成文法代码用的ANTLR4版本完全一致的
antlr4-runtime.jar,放入项目依赖目录 - 运行时手动指定类路径包含该jar:
java -cp "你的项目编译输出路径:antlr4-runtime.jar路径" app.ExpressionApp 你的输入文件路径
Windows系统将路径分隔符替换为;即可
场景2:Maven项目
在pom.xml中加入无额外scope限制的antlr4-runtime依赖:
<dependency> <groupId>org.antlr</groupId> <artifactId>antlr4-runtime</artifactId> <version>你的ANTLR4版本号</version> </dependency>
场景3:IDEA等IDE直接运行
- 打开项目结构设置(快捷键Ctrl+Alt+Shift+S)
- 进入「Modules」→ visitor模块 → 「Dependencies」标签
- 确认ANTLR4 Runtime依赖的「Scope」设置为
Compile,不要设置为Provided/Test - 重新编译运行即可
场景4:打包后运行
如果需要打可执行jar包,使用maven-assembly-plugin/shade-plugin将antlr4-runtime的类一起打入最终jar,否则运行时依然会找不到类。
内容的提问来源于stack exchange,提问作者HARPREET
相关产品推荐
相关产品推荐

