我正在使用Groovy和Kotlin开发一个小项目,而我的Kotlin代码依赖于我的Groovy代码,而不是相反 . 但是,Kotlin首先编译我的代码而不是Groovy,因此,我得到像 Unresolved reference: SiteRepository 这样的错误
Unresolved reference: SiteRepository
任何建议我如何解决这个问题,通过改变构建顺序,或者Kotlin明确依赖于Groovy,还是任何其他建议?
可以这样做:
Kotlin First:
//compileKotlin.dependsOn = compileKotlin.taskDependencies.values - 'compileJava' compileGroovy.dependsOn compileKotlin compileGroovy.classpath += files(compileKotlin.destinationDir) classes.dependsOn compileGroovy
Groovy First:
compileGroovy.dependsOn = compileGroovy.taskDependencies.values - 'compileJava' compileKotlin.dependsOn compileGroovy compileKotlin.classpath += files(compileGroovy.destinationDir) classes.dependsOn compileKotlin
或 Kotlin First:
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上publish it .
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
Build仍然不起作用,因为Kotlin没有看到Groovy .
2 回答
可以这样做:
4.10之后
Kotlin First:
4.10之前
Groovy First:
或 Kotlin First:
为了清楚起见,你可以选择你的Kotlin代码是否依赖于Kotlin上的Groovy或Groovy,但是你不能双管齐下 .
我认为在一个模块中针对Groovy编译Kotlin是不可能的,但是你可以将Groovy(或Kotlin)移到单独的模块中 . Groovy将在jar中编译,而Kotlin现在可以依赖于Groovy代码 . 为了帮助你,我写了一个简单的项目,并在github上publish it .
upd 1:
我使用kotlin和groovy创建新模块和项目,并检查任务依赖项:
看起来像改变kotlin和groovy任务的顺序就足够了 . 但是,如果我们以这种方式改变步骤:
Build仍然不起作用,因为Kotlin没有看到Groovy .