Spring Boot非Web项目如何解决Surefire Fork JVM超时被杀死问题?
解决Surefire插件forked进程超时问题
你的问题核心是Maven Surefire插件默认的forked进程退出超时时间(30秒)不足以等待子进程结束,导致主线程完成后插件强制杀死未退出的forked JVM,抛出超时错误。之前的配置无效是因为没找对正确的配置位置,以下是两种可行的解决方案:
方案一:在pom.xml中显式配置Surefire插件
由于你的项目依赖Spring Boot父工程,Surefire插件是被间接引入的,需要显式添加插件配置来覆盖默认超时:
<build> <plugins> <!-- 保留原有插件,新增Surefire插件配置 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <!-- 调整超时时间为60秒,可根据子进程实际运行时间修改 --> <forkedProcessExitTimeoutInSeconds>60</forkedProcessExitTimeoutInSeconds> </configuration> </plugin> </plugins> </build>
为什么之前的配置无效?
- 你把配置放到了
spring-boot-maven-plugin里,但这个超时属性属于maven-surefire-plugin,和Spring Boot插件无关; - 如果用properties配置,需要加上
surefire.前缀,即<surefire.forkedProcessExitTimeoutInSeconds>60</surefire.forkedProcessExitTimeoutInSeconds>,否则插件无法识别。
方案二:GitHub Action命令行指定参数
如果不想修改pom.xml,可以在GitHub Action的命令中添加正确的系统参数(注意要带surefire.前缀):
mvn package -Dsurefire.forkedProcessExitTimeoutInSeconds=60
注意版本兼容性
如果你的Surefire插件版本较旧(比如低于2.22.0),参数名可能是surefire.exitTimeout,此时命令行需要改为:
mvn package -Dsurefire.exitTimeout=60000
(这里单位是毫秒,60000即60秒)
内容的提问来源于stack exchange,提问作者Yevhen Vasyliev
相关产品推荐
相关产品推荐

