Как настроить каждый проект Kotlin в многопроектной сборке Gradle? - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть проект, который использует многопроектную сборку 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 использовать.

build.gradle файлы наших проектов Kotlin начинаются с

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

, но не работают ни withType(org.jetbrains.kotlin.jvm), ни withType(KotlinProject).

Какой тип я должен там использовать?Спасибо!

Ответы [ 3 ]

0 голосов
/ 21 декабря 2018

Применяемый плагин kotlin на самом деле не KotlinPlugin, а KotlinPluginWrapper.Также необходимо использовать каноническое имя, чтобы найти тип.

plugins.withType(org.jetbrains.kotlin.gradle.plugin.KotlinPluginWrapper) {
    // All the stuff that all Kotlin sub-projects have in common
    ...
}

Для перехвата всех реализаций оболочки также можно использовать KotlinBasePluginWrapper.

0 голосов
/ 24 июля 2019

Одно из решений - начать использовать собственный плагин для вашего проекта.Это именно то, что сделала команда 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

0 голосов
/ 21 декабря 2018

Вы можете ссылаться на плагин Kotlin по его id вместо его типа, как показано ниже:

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 Импорт по умолчанию (import org.gradle.api.plugins.*)

...