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

为何同时用-XDebug与-Xrunjdwp启动Spring应用会报错?

问题原因与解决方案

核心原因

问题出在shell的引号解析逻辑:当你用-Dspring-boot.run.jvmArguments="-XDebug -Xrunjdwp:..."时,外层shell会把引号内的整个内容当作一个完整字符串传递给Maven,Maven再直接把这个字符串传给JVM。但JVM要求每个-X开头的参数都是独立选项,它会把这个带空格的字符串识别成单个未定义的选项,因此抛出"Unrecognized option"错误。

正确写法

根据你使用的shell环境,选择以下任一方式:

  • POSIX shell(bash/zsh等):
    用单引号包裹参数,或者转义空格,让shell把两个参数分开传递:
    # 方式1:单引号包裹(推荐,可读性高)
    ./mvnw spring-boot:run -Dspring-boot.run.jvmArguments='-XDebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005'
    
    # 方式2:转义空格
    ./mvnw spring-boot:run -Dspring-boot.run.jvmArguments=-XDebug\ -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
    
  • Windows cmd:
    直接用双引号包裹参数即可,cmd的解析逻辑会正确识别内部空格为参数分隔:
    mvnw.cmd spring-boot:run -Dspring-boot.run.jvmArguments="-XDebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"
    

额外优化

从Java 5开始,-XDebug已经被废弃,推荐使用更现代的-agentlib:jdwp参数,它本身就包含了调试启用的功能,不需要额外加-XDebug:

./mvnw spring-boot:run -Dspring-boot.run.jvmArguments='-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 06:12:12