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

Tomcat 9部署Vaadin 19生产模式war包时出现StackOverflowError异常

问题根因

报错是Tomcat注解扫描过程中,触发了BouncyCastle加密库的类循环继承链检测,加上Vaadin打包引入的依赖数量多,栈深度超过默认JVM线程栈阈值,因此出现偶发的StackOverflowError,同时全量依赖扫描也会导致部署速度变慢。

解决方案

1. 优化Tomcat注解扫描规则(优先推荐,可同时解决部署慢和报错问题)

在项目的WEB-INF/web.xml中新增如下配置,跳过无需扫描的第三方依赖包:

<context-param>
    <param-name>tomcat.util.scan.StandardJarScanFilter.jarsToSkip</param-name>
    <param-value>bcprov*.jar,bcpkix*.jar,vaadin-*.jar,webjars-*.jar</param-value>
</context-param>

如果需要全局生效,可直接修改Tomcat安装目录下conf/catalina.properties文件中的tomcat.util.scan.StandardJarScanFilter.jarsToSkip参数,追加上述jar包匹配规则即可。

2. 调大JVM线程栈容量

编辑Tomcat的bin/setenv.sh(Linux环境)文件,增加JVM参数提升线程栈大小:

export CATALINA_OPTS="$CATALINA_OPTS -Xss2m"

默认JVM线程栈大小通常为1M,调整为2M即可覆盖扫描场景的栈深度需求,不会额外占用过多系统内存。

3. 排查BouncyCastle依赖冲突

在项目根目录执行Gradle命令排查依赖:

./gradlew dependencies | grep bouncycastle

排除重复引入的不同版本BouncyCastle库,保证整个项目仅保留一套统一版本的加密库,避免多版本类加载导致的循环继承判断异常。

4. 优化Vaadin生产打包配置

检查Vaadin Gradle插件配置,开启生产构建的依赖裁剪规则,排除开发环境依赖、前端构建缓存等非运行必要内容,减小最终war包体积,降低Tomcat扫描压力。

内容的提问来源于stack exchange,提问作者Ximo Dante

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:54:03