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

使用nvim-dap远程调试Java时出现连接被拒绝的问题排查

Neovim中nvim-dap Java远程调试连接被拒绝问题

错误信息

Error 09:21:30 notify.error DAP Error on attach: Failed to attach to remote debuggee VM. Reason: java.net.ConnectException: Connection refused

Neovim配置

使用LazyVim的lang.java扩展插件,nvim-dap配置如下:

{
  "mfussenegger/nvim-dap",
  optional = true,
  opts = function()
    local dap = require("dap")
    dap.configurations.java = {
      {
        type = "java",
        request = "attach",
        name = "Debug (Attach) - Remote",
        hostName = "127.0.0.1",
        port = 5005,
      },
    }
  end,
  dependencies = {
    {
      "williamboman/mason.nvim",
      opts = { ensure_installed = { "java-debug-adapter", "java-test" } },
    },
  },
}

已尝试操作

手动通过以下命令启动JVM后,再附加调试器可正常工作:

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005 -cp bin exemplo.Autodromo

此时JVM输出:

Listening for transport dt_socket at address: 5005

但直接在Neovim中启动调试则出现连接被拒绝错误。

问题分析与解决方案

错误原因

当前配置的是**attach(附加)**调试模式,该模式的核心前提是:目标Java进程必须已经以调试模式启动,并在指定端口(5005)监听调试连接。直接启动调试时,没有符合条件的Java进程在运行,因此会触发连接拒绝错误。

实现自动启动调试的配置调整

如果想让nvim-dap无需手动执行java命令,自动启动Java进程并附加调试,需要改用**launch(启动)**模式。修改nvim-dap的Java配置,添加launch类型的配置项:

{
  "mfussenegger/nvim-dap",
  optional = true,
  opts = function()
    local dap = require("dap")
    dap.configurations.java = {
      -- 原有的附加模式配置
      {
        type = "java",
        request = "attach",
        name = "Debug (Attach) - Remote",
        hostName = "127.0.0.1",
        port = 5005,
      },
      -- 新增的启动模式配置
      {
        type = "java",
        request = "launch",
        name = "Debug (Launch) - Main Class",
        mainClass = function()
          -- 手动输入主类全限定名,比如exemplo.Autodromo
          return vim.fn.input("Enter main class: ")
        end,
        classPaths = {"./bin"}, -- 替换为你的项目类路径
        vmArgs = "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005"
      },
    }
  end,
  dependencies = {
    {
      "williamboman/mason.nvim",
      opts = { ensure_installed = { "java-debug-adapter", "java-test" } },
    },
  },
}

配置说明

  • request = "launch":告诉nvim-dap主动启动Java进程
  • mainClass:指定要运行的Java主类全限定名,这里用输入框让你手动输入,也可以结合nvim-jdtls自动获取项目主类
  • classPaths:设置项目的类路径,比如编译后的bin目录或依赖jar包路径,需和你的项目结构匹配
  • vmArgs:自动添加调试代理参数,无需手动执行java命令

如果使用nvim-jdtls管理Java项目,还可以通过require('jdtls').setup_dap()来自动生成更智能的launch配置,自动获取类路径和主类信息,无需手动配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 18:22:45