首页 文章

编译Groovy和Kotlin?

提问于
浏览
19

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

任何建议我如何解决这个问题,通过改变构建顺序,或者Kotlin明确依赖于Groovy,还是任何其他建议?

2 回答

  • 7

    可以这样做:

    4.10之后

    Kotlin First:

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

    4.10之前

    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,但是你不能双管齐下 .

  • 24

    我认为在一个模块中针对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 .

相关问题