Java1.8+Maven3.8.2环境下maven-compiler-plugin编译报StackOverflowError求助
问题根因
该报错核心是java.lang.StackOverflowError栈溢出,出现在JDK内置的javac编译器编译阶段,和maven-compiler-plugin插件版本无关:从错误堆栈可以看出,编译器在处理连续二元表达式(比如超长的字符串拼接、多层嵌套的运算/三元表达式)时,递归调用深度超过了JVM默认的栈大小上限,最终触发编译失败。
可尝试的解决方案
方案1:在maven编译插件中配置栈大小参数
直接在项目pom.xml的maven-compiler-plugin配置项中增加JVM栈参数,将栈上限调大即可,参考配置如下:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> <!-- 增加编译时JVM栈大小,可根据实际情况调整为16m/32m --> <compilerArgs> <arg>-J-Xss16m</arg> </compilerArgs> </configuration> </plugin>
方案2:临时调整Maven运行的全局参数
如果不想改动pom文件,也可以直接设置MAVEN_OPTS环境变量调整全局栈大小:
- Windows系统cmd执行:
set MAVEN_OPTS=-Xss16m - Linux/Mac系统终端执行:
export MAVEN_OPTS=-Xss16m
设置完成后再执行mvn编译命令即可生效。
方案3:代码层面优化
如果调整栈参数后仍有报错,可以排查项目中是否存在超长的连续字符串拼接、嵌套层级过深的运算表达式,将过长的逻辑拆分为多段执行,从根源避免编译器递归深度过高。
内容的提问来源于stack exchange,提问作者Bernadette Feliciano
相关产品推荐
相关产品推荐

