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

GitHub Codespaces中VS Code的Java与Kotlin互操作性及调试问题

问题描述

我在GitHub Codespaces中使用VS Code维护一个包含Java和Kotlin源码的Gradle项目,无法使用JetBrains Gateway。项目能通过./gradlew正常构建、执行测试任务,但IDE内的Java代码无法识别Kotlin类,报错:

import something.from.kotlin.KotlinCode; // 提示:The import something.from.kotlin.KotlinCode cannot be resolved
import something.from.java.JavaCodeTwo;

class JavaCode {
    public void method() {
        KotlinCode kc = new KotlinCode(); // 该行无法正常识别
    }
}

目前只能通过命令行运行测试,希望在VS Code内直接运行并调试测试。已安装以下扩展但未解决问题:

  • Extension Pack for Java
  • Gradle for Java
  • Java Kotlin integration
  • Kotlin
  • Kotlin Language

尝试通过自定义脚本启动调试模式:

#!/bin/bash
export GRADLE_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005"
../gradlew -p .. clean test --tests '*SomeTest*'

并在VS Code的launch.json中配置附加调试器:

{
    "type": "java",
    "name": "Attach to Remote Program",
    "request": "attach",
    "projectName": "projectName", // 名称确认正确
    "hostName": "localhost",
    "port": "5005"        
}

调试器能连接并停止程序,但所有断点均无效。

解决方案

一、解决Java与Kotlin互识别问题

1. 检查并修正Gradle配置

确保build.gradle(或build.gradle.kts)正确关联Java和Kotlin源码,示例Groovy DSL配置:

plugins {
    id 'java'
    id 'org.jetbrains.kotlin.jvm' version '1.9.20' // 使用匹配的Kotlin版本
}

sourceSets {
    main {
        java.srcDirs 'src/main/java'
        kotlin.srcDirs 'src/main/kotlin'
    }
    test {
        java.srcDirs 'src/test/java'
        kotlin.srcDirs 'src/test/kotlin'
    }
}

dependencies {
    implementation platform('org.jetbrains.kotlin:kotlin-bom')
    implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
    testImplementation 'org.jetbrains.kotlin:kotlin-test-junit'
}

配置完成后,点击VS Code左侧Gradle面板的刷新按钮同步项目。

2. 清理Java语言服务缓存并简化扩展

  • 打开命令面板(Ctrl+Shift+P),执行Java: Clean Java Language Server Workspace,然后重启VS Code
  • 卸载冲突的Kotlin扩展:保留Extension Pack for Java和fwcd.kotlin即可,移除其他Kotlin相关扩展(避免版本冲突)

二、修复调试断点无效问题

1. 使用Gradle内置调试模式替代自定义脚本

直接用Gradle官方的调试启动方式,确保编译时生成完整调试符号:

./gradlew test --tests '*SomeTest*' --debug-jvm

该命令会自动在5005端口启动调试监听,无需手动设置GRADLE_OPTS。

2. 优化launch.json配置

添加源码路径映射,确保调试器能关联到Java和Kotlin源码:

{
    "type": "java",
    "name": "Attach to Gradle Test",
    "request": "attach",
    "projectName": "projectName",
    "hostName": "localhost",
    "port": "5005",
    "sourcePaths": [
        "${workspaceFolder}/src/main/java",
        "${workspaceFolder}/src/main/kotlin",
        "${workspaceFolder}/src/test/java",
        "${workspaceFolder}/src/test/kotlin"
    ]
}

*注:projectName可通过命令面板执行Java: List All Projects确认。

3. 验证断点设置

  • 优先在普通方法(非lambda、非内联函数)中设置断点,避免调试器兼容性问题
  • 确保断点位于测试代码的执行路径上(比如测试方法的第一行)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 05:10:13