我正在使用Groovy和Kotlin開發一個小型項目,而我的Kotlin代碼取決於我的Groovy代碼,而不是其他方式。然而,科特林編譯我的代碼首先代替了Groovy的,並且,作爲一個結果,我得到這樣Unresolved reference: SiteRepository
編譯Groovy和Kotlin?
任何建議,我怎麼能解決這個問題,通過更改構建順序,或科特林Groovy的顯式依賴,或任何錯誤其他建議?
我正在使用Groovy和Kotlin開發一個小型項目,而我的Kotlin代碼取決於我的Groovy代碼,而不是其他方式。然而,科特林編譯我的代碼首先代替了Groovy的,並且,作爲一個結果,我得到這樣Unresolved reference: SiteRepository
編譯Groovy和Kotlin?
任何建議,我怎麼能解決這個問題,通過更改構建順序,或科特林Groovy的顯式依賴,或任何錯誤其他建議?
我認爲這不可能在一個模塊中針對Groovy編譯Kotlin,但您可以將Groovy(或Kotlin)移動到單獨的模塊中。 Groovy將用jar編譯,而Kotlin現在可以依賴於Groovy代碼。爲了幫助我編寫簡單的項目,並在github上編寫了publish it。
UPD 1:
創建新的模塊和項目,科特林和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的。
這是可以做到像這樣:
Groovy的第一:
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
需要明確的是,你可以選擇是否你Kotlin代碼依賴於Kotlin上的Groovy或Groovy,但是你不能一直使用它。
感謝您的回答,但根據此:https://discuss.gradle.org/t/kotlin-groovy-and-java-compilation/14903/2,它似乎是可能的。只是不知道如何。 –
爲什麼你不能引入額外的模塊? – IRus
Kotlin是任何java/groovy項目中的主要語言,因爲它的安全性和語言特性。因此添加一個額外的模塊(這非常簡單)看起來不太難。 – IRus