Kotlin Gradle插件如何配置自定义编译输出目录?
解决Kotlin Gradle插件自定义编译输出目录不生效的问题
在你使用的Kotlin 1.2.31 + Gradle 4.6版本组合中,确实存在这个问题——直接在sourceSets的Kotlin块里设置outputDir不会生效,这是因为当时的Kotlin Gradle插件对输出目录的配置逻辑和Java插件不一样:Java插件会直接读取sourceSets里的outputDir配置,但Kotlin插件并没有沿用这个逻辑。
正确的配置方式
你需要直接修改Kotlin编译任务的输出目录,而不是通过sourceSets配置。具体可以这样写:
// 针对主代码的Kotlin编译任务 compileKotlin { destinationDir = file('work/program') } // 如果需要配置测试代码的输出目录,可添加下面这段 compileTestKotlin { destinationDir = file('work/test-program') }
如果项目里有多个Kotlin编译任务(比如多模块或者不同的source set),也可以批量处理:
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile) { destinationDir = file("work/program/${it.name.replace('compile', '').toLowerCase()}") }
为什么原来的配置不生效
在Kotlin 1.x早期版本的Gradle插件中,sourceSets.main.kotlin.outputDir这个配置项并没有被编译任务所识别,Kotlin编译任务默认会复用Java插件的输出目录(也就是build/classes/kotlin/main),或者使用插件内部硬编码的路径,所以直接修改sourceSets里的设置不会起作用。
你提交bug报告的做法是对的,这个问题在后续的Kotlin版本(比如1.3及以上)中已经得到了修复,新版本的插件已经支持通过sourceSets来配置Kotlin的输出目录了。
内容的提问来源于stack exchange,提问作者Dimitar II
相关产品推荐
相关产品推荐

