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

使用JasperReports 6.4.0+JsonQL时出现antlr/TokenStream类找不到错误

解决方案:解决JasperReports 6.4.0 + JsonQL 导致的 antlr/TokenStream 类缺失问题

这个问题的核心原因其实很明确:JsonQL查询的解析依赖ANTLR库,而JasperReports 6.4.0将ANTLR 2.7.5标记为可选依赖,导致你的服务器应用没有自动引入这个依赖。

为什么本地正常、部署后报错?

本地开发时,你的IDE可能自动帮你引入了ANTLR依赖(比如通过Maven仓库的传递依赖,或者本地仓库已有该包),所以编译和预览都没问题。但部署到独立服务器时,由于Jasper的ANTLR依赖是optional=true,Maven不会自动把它打包到你的应用中,当模板触发JsonQL解析时,JVM找不到ANTLR的相关类,就抛出了NoClassDefFoundError。

而其他模板正常运行的原因也很简单:那些模板没有使用JsonQL,不需要ANTLR来解析查询语句,自然不会触发这个依赖缺失的问题。

快速解决方法

你不需要修改Jasper引擎的pom文件,直接在你的服务器应用的pom.xml中显式添加ANTLR 2.7.5的依赖即可:

<dependency>
    <groupId>antlr</groupId>
    <artifactId>antlr</artifactId>
    <version>2.7.5</version>
</dependency>

这个版本是JasperReports 6.4.0官方指定的依赖版本,能保证最好的兼容性,不建议随意换成2.7.7(除非你遇到了2.7.5的特定bug)。

添加依赖后重新打包部署,模板应该就能正常生成PDF了。

内容的提问来源于stack exchange,提问作者Vishal Sawant

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:41:37