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

Kotlin项目中Java类调用Kotlin函数报错排查

解决Java调用Kotlin函数找不到MyKotlinKt的问题

核心排查与修复步骤

1. 确认自定义Convention插件的Kotlin配置

你的build.gradle.kts使用了com.example.kotlin-library-conventions自定义插件,必须确保该插件内部已正确配置Kotlin JVM环境:

// 自定义convention插件的示例配置(需确保已实现)
plugins {
    id("org.jetbrains.kotlin.jvm")
}

// 配置Java编译依赖Kotlin编译产物,保证顺序正确
tasks.withType<JavaCompile> {
    dependsOn(tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>())
}

kotlin {
    jvmToolchain(17) // 替换为项目使用的JDK版本
}

2. 检查源文件目录结构

确保Java和Kotlin文件符合标准源集目录结构:

src/main/kotlin/com/example/MyKotlin.kt
src/main/java/com/example/Runner.java

若目录结构非标准,需在build.gradle.kts中显式配置源集:

sourceSets {
    main {
        kotlin.srcDirs("src/main/kotlin")
        java.srcDirs("src/main/java")
    }
}

3. 验证Kotlin编译产物

执行命令./gradlew compileKotlin,检查build/classes/kotlin/main/com/example/目录下是否生成MyKotlinKt.class文件。若未生成,说明Kotlin编译环节存在问题,需重点排查自定义插件的配置完整性。

4. 临时直接添加Kotlin配置(快速验证)

若自定义插件排查困难,可临时在当前模块build.gradle.kts中直接添加Kotlin配置,验证问题是否解决:

plugins {
    id("com.example.kotlin-library-conventions")
    id("org.jetbrains.kotlin.jvm") version "你的Kotlin版本"
}

tasks.compileJava {
    dependsOn(tasks.compileKotlin)
    classpath += files(tasks.compileKotlin.get().destinationDirectory)
}

补充说明

  • Kotlin顶层函数编译后会生成[文件名]Kt格式的类,你的MyKotlin.kt中add函数对应MyKotlinKt.add的调用写法本身是正确的。
  • 需确保项目中Kotlin版本与Gradle插件版本兼容,避免版本不匹配引发编译异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 10:52:51