导入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
相关产品推荐
相关产品推荐

