gradle 无法使用 kotlin 类编译 java 类

标签 gradle kotlin

我有一个 gradle 4.1 多项目,其中包含一个“projectA”,其中包含 2 个子文件夹“api”和“implementation”。

多项目使用主 build.gradle 的子项目部分中定义的 kotlinjava-library 插件。 实现项目具有对 :projectA:api

的 API 依赖

在 api 文件夹中,“src/main/java”内有 kotlin 和 java 文件,在实现项目中,我正在从 API 创建 kotlin 类的新实例。

在 Intellij Idea 中,我没有任何编译错误;但是当我使用 gradle 编译整个项目时,出现错误:找不到符号。就好像 compileJava 无法访问文件夹 kotlin-classes

build/kotlin-classes 中,我看到了我的 file.class 类文件也位于 build/classes 目录中

错误详细信息:

Task :projectA:api:compileKotlin Using kotlin incremental compilation

Task :projectA:implementation:compileJava (...) error: cannot find symbol (the import fails)

更新 1:删除 java-library 解决了我的问题

最佳答案

这是一个known issue java-library 插件的:当在使用其他 JVM 语言(Kotlin、Scala、Groovy 等)的项目中使用时,它不会注册其他语言的类,以便依赖项目获取它们当他们消耗类(class)时。

幸运的是,它也有一个解决方法。适应 Kotlin,它看起来像:

configurations {
    apiElements {
        outgoing.variants.getByName('classes').artifact(
            file: compileKotlin.destinationDir,
            type: ArtifactTypeDefinition.JVM_CLASS_DIRECTORY,
            builtBy: compileKotlin)
    }
}

如果您使用 Kapt1,则为 file:compileKotlinAfterJava.destinationDir,对于低于 4.0 的 Gradle 版本,请使用 builtBy: copyMainKotlinClasses

此问题也在 Kotlin 问题跟踪器中进行跟踪:KT-18497 ,按照该问题查看 Kotlin Gradle 插件端何时修复该问题,这样就不再需要上述解决方法了。

关于gradle 无法使用 kotlin 类编译 java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45762661/

相关文章:

java - android系统会阻止FCM通知吗

android - 无法将 Maven 的库包含到 Android Studio

android - 在gradle中,如何(递归地)将目录设置为任务的输出? (要检查并散列以进行最新检查)

java - gradle 中的依赖项不链接 jar

kotlin - Kotlin应用程序配置avro的kafka使用者和produser失败

android - java.lang.ClassNotFoundException : com. intellij.junit5.JUnit5IdeaTestRunner 在 kotlin 中使用 spek

android - 将 DexGuard 集成到 Android Studio

java - 创建新项目时android studio出错

android - 使用 LiveData 时,为什么要在 ViewModel 类中双重声明变量?

java - Android ListView.notifyDataSetChanged 导致不正确的行