如何在Gradle多项目构建中配置每个Kotlin项目?

时间:2018-12-21 10:20:46

标签: java gradle kotlin build build.gradle

我有一个使用Gradle多项目构建的项目。 一些子项目是用Java编写的,其他子项目是用Kotlin编写的。

我们有一个顶级build.gradle文件。该文件包含以下部分:

allprojects {
    plugins.withType(JavaPlugin) {
        // All the stuff that all Java sub-projects have in common
        ...
    }
    // All the stuff that all sub-projects have in common
    ...
}

我们现在想为我们的Kotlin子项目介绍通用设置,但是我找不到要使用的withType

我们Kotlin项目的build.gradle文件以

开头
plugins {
    id "org.jetbrains.kotlin.jvm" version "1.3.0"
} 

但是withType(org.jetbrains.kotlin.jvm)withType(KotlinProject)都不起作用。

在那里我必须使用哪种类型?谢谢!

3 个答案:

答案 0 :(得分:4)

您可以按id而不是其类型来引用Kotlin插件,如下所示:

allprojects {

    plugins.withType(JavaPlugin) {
        // All the stuff that all Java sub-projects have in common
        // ...
    }
    plugins.withId("org.jetbrains.kotlin.jvm") {
        // All the stuff that all Kotlin sub-projects have in common
        // ...
    }    
}

对于Java插件,它更容易一些,您可以使用plugins.withType,因为它是Gradle的“核心”插件,而JavaPlugin类可以用作Gradle Default Imports的一部分( import org.gradle.api.plugins.*

答案 1 :(得分:1)

所应用的kotlin插件实际上不是select * from t where date >= sysdate - 1 order by date desc offset 19 fetch next 21 rows only; ,而是KotlinPlugin。另外,有必要使用规范名称来查找类型。

KotlinPluginWrapper

要捕获所有包装器实现,也可以使用plugins.withType(org.jetbrains.kotlin.gradle.plugin.KotlinPluginWrapper) { // All the stuff that all Kotlin sub-projects have in common ... }

答案 2 :(得分:1)

一种解决方案是开始为您的项目使用自定义插件。这正是AndroidX团队所做的

import org.gradle.api.Plugin
import org.gradle.api.Project
import org.jetbrains.kotlin.gradle.plugin.KotlinBasePluginWrapper
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

class MyPlugin : Plugin<Project> {
    override fun apply(project: Project) {
        project.plugins.all {
            when (it) {
                    ...
                is KotlinBasePluginWrapper -> {
                    project.tasks.withType(KotlinCompile::class.java).configureEach { compile ->
                        compile.kotlinOptions.allWarningsAsErrors = true
                        compile.kotlinOptions.jvmTarget = "1.8"
                    }
                }
            }
        }
    }

您需要设置所有样板才能进行此设置,但是长期收益很高。

了解更多

https://android.googlesource.com/platform/frameworks/support/+/refs/heads/androidx-master-dev/buildSrc/src/main/kotlin/androidx/build/AndroidXPlugin.kt#186

https://www.youtube.com/watch?v=sQC9-Rj2yLI&feature=youtu.be&t=429