Eclipse 2020-03验证Maven项目时触发java.lang.StackOverflowError问题求助
分析与解决方案:Eclipse验证Maven项目时的StackOverflowError
从你提供的错误日志和pom.xml内容来看,这个java.lang.StackOverflowError确实和Maven依赖的解析过程高度相关,下面是具体的分析和解决思路:
错误根源分析
你的错误日志显示栈溢出发生在Eclipse内置的JSON解析器中:
!STACK 0 java.lang.StackOverflowError
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at org.eclipse.json.provisonnal.com.eclipsesource.json.JsonParser.read(JsonParser.java:326)
...
这说明Eclipse的Maven插件在解析依赖的元数据(比如仓库中依赖的pom文件里的JSON格式配置)时,因为递归深度过大或者数据量超出了默认的栈容量,导致栈溢出。而你的pom.xml中包含了多个复杂的GWT相关依赖,这类依赖通常带有庞大的依赖树,很容易触发这类问题。
具体解决步骤
1. 增大Eclipse的线程栈大小
栈溢出最直接的解决方式是给Eclipse分配更大的栈空间:
- 找到Eclipse安装目录下的
eclipse.ini文件 - 添加或修改以下参数(比如设置为4MB):
-Xss4m
- 重启Eclipse后重新验证项目
2. 检查并排除循环依赖
循环依赖会让依赖解析过程陷入无限递归,直接导致栈溢出:
- 在命令行进入项目根目录,执行Maven命令查看依赖树:
mvn dependency:tree
- 查看输出中是否有
cycle detected的提示,找到循环依赖的节点,通过<exclusion>标签排除掉多余的依赖。
3. 逐步排查可疑依赖
你的pom中包含多个非核心的GWT第三方依赖,建议逐步排查:
- 暂时注释掉一些非必需的依赖(比如
gwt-dev-calendar、advanced-gwt等) - 每次注释后重新验证项目,直到找到触发栈溢出的那个依赖
- 针对该依赖,可以尝试更换版本,或者检查其依赖树是否有异常
4. 更新Eclipse的Maven插件
旧版本的M2E插件可能存在JSON解析的栈溢出bug:
- 打开Eclipse的
Help > Eclipse Marketplace - 搜索
Maven Integration for Eclipse,更新到最新版本 - 重启Eclipse后重试
5. 清理本地Maven仓库
部分依赖的元数据可能损坏,导致解析异常:
- 找到本地Maven仓库的默认路径(通常是
~/.m2/repository) - 删除和你项目依赖相关的目录(比如
com/google/gwt、com/smartgwt等) - 在Eclipse中执行
Maven > Update Project,让Maven重新下载完整的依赖元数据
内容的提问来源于stack exchange,提问作者Jo Vanmont
相关产品推荐
相关产品推荐

