gradle无法使用kotlin类编译java类

时间:2017-08-18 18:09:18

标签: gradle kotlin

我有一个包含" projectA"的gradle 4.1多项目。包含2个子文件夹" api"和"实施"。

多项目使用主build.gradle的子项目部分中定义的kotlinjava-library个插件。 实现项目将API依赖性设置为:projectA:api

在api文件夹中我有kotlin和java文件里面的&#s; src / main / java'在实现项目中,我从API创建了一个kotlin类的新实例。

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

build/kotlin-classes内,我看到了我的file.class 类文件也在build / classes dir上

错误详情:

  

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

     

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

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

1 个答案:

答案 0 :(得分:2)

这是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插件端的修复时间,以便上述解决方法不再需要。