编译Groovy和Kotlin?

我正在使用Groovy和Kotlin开发一个小型项目,我的Kotlin代码依赖于我的Groovy代码,而不是相反。 但是,Kotlin首先编译我的代码,而不是Groovy,结果,我得到像Unresolved reference: SiteRepository一样的错误Unresolved reference: SiteRepository

任何建议,我可以通过更改构建序列,或Kotlin明确取决于Groovy,或任何其他建议来解决这个问题?

它可以这样做:

Groovy第一:

 compileGroovy.dependsOn = compileGroovy.taskDependencies.values - 'compileJava' compileKotlin.dependsOn compileGroovy compileKotlin.classpath += files(compileGroovy.destinationDir) classes.dependsOn compileKotlin 

Kotlin第一:

 compileKotlin.dependsOn = compileKotlin.taskDependencies.values - 'compileJava' compileGroovy.dependsOn compileKotlin compileGroovy.classpath += files(compileKotlin.destinationDir) classes.dependsOn compileGroovy 

清楚的是,你可以选择你的Kotlin代码依赖于Kotlin上的Groovy还是Groovy,但是你不能一概而论。

我认为这不可能在一个模块中针对Groovy编译Kotlin,但是您可以将Groovy(或Kotlin)移动到单独的模块中。 Groovy将被编译成jar,Kotlin现在可以依赖于Groovy代码。 为了帮助你,我写了简单的项目,并发布在github上。

upd 1:

我用kotlin和groovy创建新的模块和项目,并检查任务依赖关系:

 ./gradlew -m kotlin-groovy:build :kotlin-groovy:compileKotlin SKIPPED :kotlin-groovy:compileJava SKIPPED :kotlin-groovy:compileGroovy SKIPPED :kotlin-groovy:processResources SKIPPED :kotlin-groovy:classes SKIPPED :kotlin-groovy:jar SKIPPED :kotlin-groovy:assemble SKIPPED :kotlin-groovy:compileTestKotlin SKIPPED :kotlin-groovy:compileTestJava SKIPPED :kotlin-groovy:compileTestGroovy SKIPPED :kotlin-groovy:processTestResources SKIPPED :kotlin-groovy:testClasses SKIPPED :kotlin-groovy:test SKIPPED :kotlin-groovy:check SKIPPED :kotlin-groovy:build SKIPPED BUILD SUCCESSFUL Total time: 2.587 secs 

看起来像kotlin的变化秩序和groovy任务足够。 但是如果我们以这种方式改变步骤:

 ./gradlew -m kotlin-groovy:build :kotlin-groovy:compileGroovy SKIPPED :kotlin-groovy:compileKotlin SKIPPED :kotlin-groovy:compileJava SKIPPED :kotlin-groovy:processResources SKIPPED :kotlin-groovy:classes SKIPPED :kotlin-groovy:jar SKIPPED :kotlin-groovy:assemble SKIPPED :kotlin-groovy:compileTestKotlin SKIPPED :kotlin-groovy:compileTestJava SKIPPED :kotlin-groovy:compileTestGroovy SKIPPED :kotlin-groovy:processTestResources SKIPPED :kotlin-groovy:testClasses SKIPPED :kotlin-groovy:test SKIPPED :kotlin-groovy:check SKIPPED :kotlin-groovy:build SKIPPED BUILD SUCCESSFUL Total time: 2.745 secs 

构建仍然不起作用,因为Kotlin没有看到Groovy。