入门 Zed Industries 2026-09-14 17:42:19 · 0 阅读

第82章 Zed 编辑器中 Java 支持的安装与配置指南

Zed 中的 Java 语言支持由以下组件提供:

安装 OpenJDK

需要安装 Java 运行时(OpenJDK)。

  • macOS:brew install openjdk
  • Ubuntu:sudo add-apt-repository ppa:openjdk-23 && sudo apt-get install openjdk-23
  • Windows:choco install openjdk
  • Arch Linux:sudo pacman -S jre-openjdk-headless

或者手动下载并安装 OpenJDK 23

安装扩展

你可以打开 {#action zed::Extensions}({#kb zed::Extensions}) 并搜索 java 来安装。

快速上手与配置

对于大多数用户,Java 支持开箱即用。

  • 通常建议将 Zed 项目根目录设置在 Java 项目根目录(即包含 pom.xmlbuild.gradle 文件的位置)。

  • 默认情况下,扩展会为你下载并运行最新版本的官方 JDTLS,这要求系统中可通过 $JAVA_HOME 环境变量或 $PATH 中的 java(.exe) 可执行文件提供 Java 21。如果项目环境需要更低版本的 Java,可以通过 java_home 配置选项指定用于运行 JDTLS 的其他 JDK。

  • 你可以为 JDTLS 提供< strong>自定义启动脚本:将一个名为 jdtls(Windows 上为 jdtls.bat)的可执行文件添加到 $PATH 环境变量中。若该文件存在,扩展将跳过下载和启动托管实例,转而使用环境中的实例。

  • 为了支持 Lombok,必须在启动 JDTLS 时下载 lombok-jar 并将其注册为 Java-Agent。默认情况下,扩展会自动处理此事;如果你不希望这样,可以将 lombok_support 配置选项设为 false

以下是一个包含上述配置的常见 settings.json 示例:

{
  "lsp": {
    "jdtls": {
      "settings": {
        "java_home": "/path/to/your/JDK21+",
        "lombok_support": true,
      },
    },
  },
}

调试

调试功能通过我们的 Java Debug Fork 实现,扩展会自动下载并启动它。关于 Zed 中调试的工作原理,请参阅 Debugger 文档

要开始调试 Java 项目,请在 Debug 菜单中点击 edit debug.json 按钮,并将文件内容替换为以下配置:

[
  {
    "adapter": "Java",
    "request": "launch",
    "label": "Launch Debugger",
    // 如果你的项目有多个入口,请指定要使用的那个:
    // "mainClass": "com.myorganization.myproject.MyMainClass",
    //
    // 相当于在程序入口处设置断点:
    "stopOnEntry": true,
    // 调试进程的工作目录
    "cwd": "$ZED_WORKTREE_ROOT",
  },
]

之后你就可以在 debug 菜单中选择"Launch Debugger"场景来启动新的调试会话了。

Windows 下的启动脚本(即 Tasks)

该扩展提供了在 Zed 内运行应用和测试的 Tasks——测试和入口点旁边会有小小的播放按钮。不过由于 Zed 扩展接口目前的限制,我们无法提供同时兼容 Maven 和 Gradle、且在 Windows 和 Unix 系统上都能运行的脚本,因此启动脚本默认只能在 Mac 和 Linux 上使用。

有一个比较简单的解决办法:提供你自己的 task 脚本即可让它在 Windows 上正常工作。具体做法请参见 这个 Issue,更多信息可阅读 Zed 文档中的 Tasks 部分

高级配置 / JDTLS 初始化选项

JDTLS 提供了许多配置选项,可以通过 LSP 的 initialize 请求传入。该扩展会将你在设置中 lsp.jdtls.settings.initialization_options 下的 JSON 对象转发给 JDTLS。有关可用的选项和值,请参阅 JDTLS 配置 Wiki 页面。下面是一个 settings.json 示例,用于将上述 Wiki 页面中的示例配置转发给 JDTLS:

{
  "lsp": {
    "jdtls": {
      "settings": {
        // 这部分内容会作为 initializationOptions 发送给 JDTLS:
        "initialization_options": {
          "bundles": [],
          // 如果 Zed 的项目根目录与 Java 项目根目录不一致,请使用此项:
          "workspaceFolders": ["file:///home/snjeza/Project"],
          "settings": {
            "java": {
              "home": "/usr/local/jdk-9.0.1",
              "errors": {
                "incompleteClasspath": {
                  "severity": "warning",
                },
              },
              "configuration": {
                "updateBuildConfiguration": "interactive",
                "maven": {
                  "userSettings": null,
                },
              },
              "import": {
                "gradle": {
                  "enabled": true,
                },
                "maven": {
                  "enabled": true,
                },
                "exclusions": [
                  "**/node_modules/**",
                  "**/.metadata/**",
                  "**/archetype-resources/**",
                  "**/META-INF/maven/**",
                  "/**/test/**",
                ],
              },
              "referencesCodeLens": {
                "enabled": false,
              },
              "signatureHelp": {
                "enabled": false,
              },
              "implementationCodeLens": "all",
              "format": {
                "enabled": true,
              },
              "saveActions": {
                "organizeImports": false,
              },
              "contentProvider": {
                "preferred": null,
              },
              "autobuild": {
                "enabled": false,
              },
              "completion": {
                "favoriteStaticMembers": [
                  "org.junit.Assert.*",
                  "org.junit.Assume.*",
                  "org.junit.jupiter.api.Assertions.*",
                  "org.junit.jupiter.api.Assumptions.*",
                  "org.junit.jupiter.api.DynamicContainer.*",
                  "org.junit.jupiter.api.DynamicTest.*",
                ],
                "importOrder": ["java", "javax", "com", "org"],
              },
            },
          },
        },
      },
    },
  },
}

另请参阅

Zed Java 仓库 Eclipse JDTLS 仓库

评论 (0)