如何在Gradle中将编译器参数传递给Kotlin编译器

45
我正在使用Kotlin gradle插件通过Gradle编译一个Kotlin库jar文件。我试图找到一种方法来传递简单的-include-runtime编译器参数给Kotlin编译器。但我似乎找不到任何相关文档。我尝试模仿Java插件,但似乎无效。这里提供了一些关于命令行编译器的文档,但Gradle文档没有提及如何传递编译器参数。请参考这里的文档。

嗨!你最终是怎么解决这个问题的?:D - Jeel Shah
我几年前就问过这个问题。我的需求已经消失了。查看Gradle插件文档http://kotlinlang.org/docs/reference/using-gradle.html,我发现有一个新的`freeCompilerArgs`,我可以使用它来传递必要的参数。如果我无法让它工作,我会考虑构建一个fat jar或类似的东西。 - spierce7
3个回答

58
你可以在KotlinCompile类型的任务中的kotlinOptions闭包内指定编译器参数。例如,对于所有这些任务:
allprojects {
    ...

    tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
        kotlinOptions {
            jvmTarget = '1.6'
            freeCompilerArgs += '-include-runtime'
        }
    }
}

Kotlin文档:使用Gradle


你好,这个是添加到项目级别的gradle文件还是模块级别的gradle文件? - Jeel Shah
这将是针对您正在申请Kotlin插件的模块。 - spierce7
@deviant,你说得对,API已经改变。现在KotlinCompile任务上可用kotlinOptions,所以我已更新我的答案。 - Miha_x64

2

试试这个:

compileKotlin {
    kotlinOptions.includeRuntime = true
}

UPD 顺便提一下,这个确切的选项 includeRuntime 无法工作,因为这不是 Gradle 的方式。在 Gradle 中有许多选项可以构建带有依赖项的 jar 包:Gradle – 创建带有依赖项的 Jar 包Gradle Shadow


你可以在Kotlin的插件测试中看到它,例如:https://github.com/JetBrains/kotlin/search?l=gradle&q=compileKotlin&utf8=%E2%9C%93 - Sergey Mashkov
@SergeyMashkov,这似乎对命令“./gradlew clean assemble”无效。有没有适用于它的命令?在您上面留下的评论中,您提供了一个链接以显示使用此代码的示例。我已经查看了所有链接,但没有任何人使用您发布的代码的示例。 - spierce7

0

如果有人正在使用Kotlin DSL,您也可以尝试这个:

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

val compileKotlin: KotlinCompile by tasks
compileKotlin.kotlinOptions.includeRuntime = true

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接