Eclipse验证项目时因LoadBundleUtil无限递归触发StackOverflowError求助
Eclipse项目Clean时LoadBundleUtil无限递归导致StackOverflowError的解决思路
执行Project > Clean > [my_project]操作时,项目验证进行至约40%时,因org.eclipse.jst.jsf.core.internal.tld.LoadBundleUtil类触发无限递归,持续抛出StackOverflowError,相关日志片段如下:
!ENTRY org.eclipse.core.jobs 4 2 2024-08-21 08:30:11.223 !MESSAGE An internal error occurred during: "Validating my_project". !STACK 0 java.lang.StackOverflowError at org.eclipse.core.runtime.Path.<init>(Path.java:331) at org.eclipse.core.runtime.Path.<init>(Path.java:264) at org.eclipse.jst.jsf.core.internal.tld.LoadBundleUtil.getFilePath(LoadBundleUtil.java:123) at org.eclipse.jst.jsf.core.internal.tld.LoadBundleUtil.getFile(LoadBundleUtil.java:117) at org.eclipse.jst.jsf.core.internal.tld.LoadBundleUtil.getSourceFile(LoadBundleUtil.java:77) at org.eclipse.jst.jsf.core.internal.tld.LoadBundleUtil.getSourceFile(LoadBundleUtil.java:86) at org.eclipse.jst.jsf.core.internal.tld.LoadBundleUtil.getSourceFile(LoadBundleUtil.java:86) at org.eclipse.jst.jsf.core.internal.tld.LoadBundleUtil.getSourceFile(LoadBundleUtil.java:86) at org.eclipse.jst.jsf.core.internal.tld.LoadBundleUtil.getSourceFile(LoadBundleUtil.java:86) [repeats for over 100 more times]
以下是针对该问题的解决思路:
临时禁用JSF验证绕过问题
右键项目选择Properties,进入Validation页面,取消勾选JSF Validator,应用设置后重新执行Clean操作。完成后可重新启用验证,观察问题是否复现。检查资源束配置的合法性
LoadBundleUtil负责处理JSF资源束加载,递归问题大概率源于资源束的循环引用或无效路径:- 检查
faces-config.xml中所有<resource-bundle>节点的base-name属性,确保路径指向合法的资源文件,不存在A引用B、B又引用A的循环配置 - 检查所有JSP/XHTML页面中的
<f:loadBundle>标签,确认basename属性配置正确,无循环引用或无效路径
- 检查
更新Eclipse JSF工具插件
Eclipse 2024-06版本的JSF插件可能存在已知bug,打开Help > Eclipse Marketplace,搜索JSF Tools,安装可用的最新版本后重启Eclipse,再测试Clean操作。清理Eclipse项目缓存
关闭Eclipse,删除工作区目录下.metadata/.plugins/org.eclipse.core.resources/.projects/[my_project]文件夹,重启Eclipse后重新导入项目,再执行Clean操作。尝试降级Eclipse版本
若上述方案均无效,可能是2024-06版本与JSF2.3存在兼容性问题,可尝试降级至2024-03等更稳定的版本后再测试。
内容的提问来源于stack exchange,提问作者SkylerA
相关产品推荐
相关产品推荐

