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

导入Kotlin代码时Scala编译失败,Gradle构建提示找不到对象

解决Scala导入Kotlin代码Gradle构建失败问题

问题场景

同一个模块混用Java、Scala和Kotlin,将Java代码迁移到Kotlin后,Java能正常导入并使用Kotlin属性,但Scala代码在IntelliJ中导入无报错,执行Gradle构建时提示找不到extended对象。

源码结构

src
  - main
    - java
      - extendedModel
        - LayoutSemantics.java
    - kotlin
      - ExtendedProperties.kt  // 注意:此处目录结构与包名不匹配
    - scala
      - ... 

代码示例

Kotlin代码(ExtendedProperties.kt)

package extended

val outLayout = "outLayout"
val outShapes = "outShapes"

Java导入(编译正常)

import static extended.ExtendedPropertiesKt.getOutLayout;

Scala导入(IntelliJ正常,Gradle构建报错)

import extended.ExtendedPropertiesKt.getOutLayout

Gradle构建报错信息

[ERROR] UniLayerLoader.scala:29:8: not found: object extended 

当前Gradle配置(build.gradle)

plugins {
    id 'altair.dnn.conv.scala-library-conventions'
    id 'jacoco'
    id 'org.jetbrains.kotlin.jvm' version '1.8.0'
}

jacoco {
    toolVersion = "0.8.7"
}

dependencies {
    implementation 'com.google.protobuf:protobuf-java:3.21.10'
    implementation 'jakarta.xml.bind:jakarta.xml.bind-api:2.3.1'
    implementation 'org.glassfish.jaxb:jaxb-runtime:2.3.3'
}

解决方案

1. 修正Kotlin文件的目录结构

Kotlin包名extended要求文件必须放在对应子目录下,将ExtendedProperties.kt移动到src/main/kotlin/extended/目录,修正后的结构如下:

src
  - main
    - kotlin
      - extended
        - ExtendedProperties.kt

2. 调整Gradle编译顺序

Gradle默认编译顺序可能导致Scala先于Kotlin编译,此时Kotlin类还未生成,Scala自然找不到。需要让Scala编译任务依赖Kotlin编译任务,在build.gradle中添加以下配置:

// 确保Scala编译在Kotlin编译完成后执行
tasks.withType(ScalaCompile) {
    dependsOn tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile)
}

// 明确指定Kotlin源码目录(可选,确保插件正确识别)
kotlin {
    sourceSets {
        main.kotlin.srcDirs = ['src/main/kotlin']
    }
}

3. 验证插件兼容性

确保kotlin-jvm插件版本(当前1.8.0)与Scala插件版本兼容,如果使用的Scala版本较旧,可能需要调整Kotlin版本到匹配的兼容版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 15:32:11