Я работаю над небольшим проектом с Groovy и Kotlin, а мой код Kotlin зависит от моего кода Groovy, а не наоборот. Тем не менее, Kotlin компилирует мой код сначала вместо Groovy, и, как результат, я получаю такие ошибки, как Unresolved reference: SiteRepository
Любые предложения, как я могу это исправить, изменив последовательность сборки или Kotlin, явно зависящую от Groovy, или любое другое предложение?
Это можно сделать так:
Groovy First:
compileGroovy.dependsOn = compileGroovy.taskDependencies.values - 'compileJava' compileKotlin.dependsOn compileGroovy compileKotlin.classpath += files(compileGroovy.destinationDir) classes.dependsOn compileKotlin
или Котлин Первый:
compileKotlin.dependsOn = compileKotlin.taskDependencies.values - 'compileJava' compileGroovy.dependsOn compileKotlin compileGroovy.classpath += files(compileKotlin.destinationDir) classes.dependsOn compileGroovy
Чтобы быть понятным, вы можете выбрать, зависит ли ваш код Котлина от Groovy или Groovy от Kotlin, но вы не можете получить его в обоих направлениях.
Я думаю, что невозможно скомпилировать Kotlin против Groovy в одном модуле, но вы можете перемещать Groovy (или Kotlin) в отдельный модуль. Groovy будет скомпилирован в банке, и теперь Котлин может зависеть от кода 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
Похоже, что порядок сортировки котлинских и хороших задач достаточно. Но если мы изменим шаги таким образом:
./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
Сборка по-прежнему не работает, потому что Котлин не видит Groovy.