编译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。