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

mvn install开启surefire调试时报错:端口5005被自身进程占用

问题分析与解决建议

核心原因

当你执行mvn install -Dmaven.surefire.debug时,Surefire插件的调试逻辑出现了重复绑定5005端口的情况:

  • 插件启动测试JVM时,已经让这个Java进程(就是你查到的PID35842)监听5005端口等待调试连接;
  • 但插件后续的逻辑又尝试再次绑定同一个端口,或者测试JVM的初始化流程里重复触发了调试代理的端口绑定操作,导致端口被当前命令自己启动的进程占用,进而抛出绑定失败的错误。

这类问题常见触发场景:

  • 使用了较老版本的Surefire插件(比如2.22.x及更早),这类版本存在调试端口重复绑定的已知bug;
  • 项目开启了测试并行执行,多个测试JVM实例同时尝试抢占同一个5005端口;
  • 插件自动生成的调试参数存在逻辑异常,导致JVM重复加载调试代理并绑定端口。

解决办法

  • 更换调试端口:执行命令时直接指定其他端口绕开冲突,比如:
    mvn install -Dmaven.surefire.debug="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5006"
    
  • 升级Surefire插件版本:把插件版本升级到3.0.0-M5及以上,新版本修复了大量调试相关的端口绑定问题;
  • 关闭测试并行:如果是并行测试导致的端口抢占,在pom.xml中添加配置禁用并行:
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>你的插件版本</version>
        <configuration>
            <parallel>none</parallel>
        </configuration>
    </plugin>
    
  • 手动指定完整调试参数:避免插件自动拼接参数出错,直接传入完整的JDWP参数,比如:
    mvn install -Dmaven.surefire.debug="server=y,suspend=y,address=5005"
    

关于其他端口

这个问题不涉及其他端口,核心就是5005端口被当前命令启动的测试JVM自身占用,和外部进程无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 07:35:18