You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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/test scope,导致打包/运行时不会带入该依赖
  • 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 19:54:00