【问题标题】:gradle fails to compile java classes using kotlin classgradle 无法使用 kotlin 类编译 java 类
【发布时间】:2018-01-27 11:52:59
【问题描述】:

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

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

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

在 Intellij Idea 中,我没有任何编译错误;但是当我使用 gradle 编译整个项目时,我有一个error: cannot find symbol。就好像compileJava 无权访问文件夹kotlin-classes

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

错误详情:

任务:projectA:api:compileKotlin 使用kotlin增量编译

任务:projectA:implementation:compileJava (...) 错误:找不到符号(导入失败)

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

【问题讨论】:

    标签: gradle kotlin


    【解决方案1】:

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

    幸运的是,它也有一个解决方法。适应 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 插件端得到修复,这样就不再需要上述解决方法了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-12
      • 1970-01-01
      • 2014-04-05
      • 2020-07-05
      • 1970-01-01
      相关资源
      最近更新 更多