使用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
相关产品推荐
相关产品推荐

