Press "Enter" to skip to content

VSCode Server在配合 Java 扩展时,有几个地方可以配置 JDK 版本

核心配置:settings.json

这是最关键的一步。你需要在你的远程项目的工作区设置 ( .vscode/settings.json ) 或者远程用户设置中配置 java.configuration.runtimes。推荐在工作区设置中配置,这样只对当前项目生效。

  1. 打开远程项目的 .vscode/settings.json 文件。 如果没有这个文件或文件夹,可以手动创建它。
  2. 添加或修改 java.configuration.runtimes 配置
    这个设置允许你定义多个 JDK,并给它们命名。然后,Java 扩展会根据项目的需要(通常由 Maven/Gradle 配置推断)或者你的明确指定来选择一个。
{
    "java.configuration.runtimes": [
        {
            "name": "JavaSE-1.8",
            "path": "/path/to/your/jdk1.8", // 替换为你的 JDK 1.8 实际路径
            "default": false // 可选,如果想让它成为非项目指定时的默认,设为true
        },
        {
            "name": "JavaSE-17",
            "path": "/path/to/your/jdk17", // 替换为你的 JDK 17 实际路径
            "default": true // 将 JDK 17 设置为默认,或者确保项目能识别它
        }
    ]
}
    • name: 给这个 JDK 配置一个易于识别的名字。通常使用 JavaSE-版本号 的格式。
    • path: 指向 JDK 安装目录的根路径 (例如,包含 bin, lib 等文件夹的那个目录)。
    • default: (可选) 如果设置为 true,当扩展无法为项目确定特定JDK时,会使用这个。建议将你最常用的或者项目应该使用的JDK设为默认,或者至少确保其 default 不是 true 如果另一个是。

项目构建工具的配置 (Maven/Gradle)

确保你的 Spring Boot 项目的构建文件 ( pom.xml 或 build.gradle ) 也正确指定了 Java 17。Java 扩展会读取这些信息来决定项目应该使用哪个 JDK 版本。

  • 对于 Maven (pom.xml):
<properties>
    <java.version>17</java.version>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
</properties>

对于 Gradle (build.gradle 或 build.gradle.kts):

  • Groovy DSL (build.gradle):
java {
    sourceCompatibility = JavaVersion.VERSION_17
    targetCompatibility = JavaVersion.VERSION_17
}

VSCode Java 扩展的设置

VSCode 的 Java 扩展(特别是 “Language Support for Java(TM) by Red Hat”)会使用这些配置。

  1. 选择项目 JDK:
    • 打开命令面板 ( Ctrl+Shift+P 或 Cmd+Shift+P )。
    • 输入并选择 “Java: Configure Java Runtime”。
    • 在打开的视图中,你应该能看到 “Project JDK(s)” 部分。确保你的项目旁边显示的是指向你配置的 JDK 17 (例如 “JavaSE-17”)。如果不是,你可以点击它并从列表中选择正确的 JDK。
    • 这里选择的 JDK 主要影响语言服务器、编译和构建,通常调试器也会遵循这个。

launch.json 配置 (用于调试)

通常,调试器会尊重你在 settings.json 和项目配置中设置的 JDK。但如果仍然有问题,你可以尝试在调试配置文件 (.vscode/launch.json) 中更明确地指定。

打开或创建 .vscode/launch.json 文件。

找到你的 Spring Boot 启动配置,或者创建一个新的。

你可以尝试添加 jdkPath 或 javaExec (取决于调试器版本和具体情况,jdkPath 正在被 javaExec 取代,但有时旧配置仍有效)。更推荐的方式是确保 java.configuration.runtimes 正确,调试器通常会使用与项目配置匹配的 runtime。

如果需要强制指定(一般不推荐,除非其他方法都无效):

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "java",
            "name": "Spring Boot-Application<your-project>",
            "request": "launch",
            "mainClass": "com.example.demo.DemoApplication", // 你的主类
            "projectName": "your-project-name", // 你的项目名
            // "jdkPath": "/path/to/your/jdk17" // 尝试这个,指向JDK的根目录
            // 或者更精确地指定 java 可执行文件:
            "javaExec": "/path/to/your/jdk17/bin/java", // 指向 JDK 17 的 java 可执行文件
            "env": {
                "JAVA_HOME": "/path/to/your/jdk17" // 有时设置这个也有帮助
            }
        }
    ]
}
  1. 注意: 直接在 launch.json 中硬编码路径不是最佳实践,因为它降低了配置的可移植性。优先确保 settings.json 中的 java.configuration.runtimes 和项目构建文件正确。

检查步骤和故障排除:

  1. 重启 VSCode: 修改 settings.json 后,最好通过 “Developer: Reload Window” 命令或完全重启 VSCode 来使设置生效。
  2. 清理 Java 语言服务器工作区:
    • 打开命令面板 (Ctrl+Shift+P 或 Cmd+Shift+P)。
    • 输入并选择 “Java: Clean Java Language Server Workspace”。
    • 然后重启并允许重新导入项目。
  3. 检查 JAVA_HOME 环境变量 (在 vscode-server 的环境中):
    • 在 VSCode 的集成终端中 (确保它连接到你的 vscode-server),运行 echo $JAVA_HOME 和 java -version。
    • 这会显示 vscode-server 运行环境中的默认 Java。虽然 VSCode 的 Java 扩展设置应该覆盖这个,但了解它是什么有时有帮助。
    • 如果 JAVA_HOME 指向 JDK 1.8,并且 VSCode 似乎忽略了你的配置,你可以尝试在启动 vscode-server 的脚本或环境中将 JAVA_HOME 设置为 JDK 17 的路径。但这应该是最后的手段。
  4. 查看调试控制台输出: 当你启动调试时,查看 “DEBUG CONSOLE” 的输出。通常它会打印出实际用于启动 Java 进程的命令,包括 Java 可执行文件的路径。这可以帮助你确认它到底用了哪个 JDK。
  5. 查看 Java 扩展的日志:
    • 命令面板 -> “Developer: Show Logs…” -> “Language Support for Java” 或 “Debugger for Java”。
    • 这些日志可能包含关于 JDK选择的更多详细信息。

总结一下推荐的顺序:

  1. 确保 pom.xml 或 build.gradle 正确配置了 Java 17。
  2. 在工作区的 .vscode/settings.json 中正确配置 java.configuration.runtimes,将 JDK 17 的路径填入,并可以将其设为 default: true(或者确保 JDK 1.8 的不是 default: true)。
  3. 使用 “Java: Configure Java Runtime” 命令检查并确保项目使用的是你定义的 JDK 17 运行时。
  4. 重新加载窗口或重启 VSCode。

通常情况下,仅前三步就足够让 VSCode 使用正确的 JDK 17 来编译、运行和调试你的 Spring Boot 项目了。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注