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




Вы можете ссылаться на плагин 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.*)
Применяемый плагин kotlin на самом деле не KotlinPlugin, а KotlinPluginWrapper. Также для поиска типа необходимо использовать каноническое имя.
plugins.withType(org.jetbrains.kotlin.gradle.plugin.KotlinPluginWrapper) {
// All the stuff that all Kotlin sub-projects have in common
...
}
Чтобы поймать все реализации оболочки, также можно использовать KotlinBasePluginWrapper.
Одно из решений - начать использовать собственный плагин для вашего проекта. Именно это и сделала команда 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://thewikihow.com/video_sQC9-Rj2yLI&feature=youtu.be&t=429
Возможный дубликат Как поделиться стандартной конфигурацией Kotlin в нескольких проектах Gradle?