gradle无法使用kotlin类编译java类
我有一个包含“projectA”的gradle 4.1多项目,其中包含2个子文件夹“api”和“implementation”。
多项目使用在主build.gradle的子项目部分中定义的kotlin
和java-library
插件。 实现项目将API依赖项设置为:projectA: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:执行:compileJava(…)错误:找不到符号(导入失败)
更新1 :删除Java库解决了我的问题
这是一个java-library
插件的已知问题 :在使用另一种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 builtBy: copyMainKotlinClasses
。
Kotlin问题跟踪器KT-18497中也跟踪了这个问题,请按照该问题查看Kotlin Gradle插件端的固定时间,以避免上述解决方法。