Q:

Gradle kotlin.dsl настройка тасков в отдельном скрипте

Я пытаюсь упростить свою сборку gradle.kts для Spring Cloud приложения на Kotlin за счет вынесения в отдельные скрипты всяческих настроек.  
Вот сейчас я бы хотел что бы версия Java настраивалась у меня в одном файлике.  
Мне понравилось как делают плагины на официальном сайте градла
Я попытался сделать плагинчик java-version.gradle.kts в папке buildSrc, после чего в основном файле уже применить его
app/build.gradle.kts
subprojects {
    apply(plugin = "java-version")
}

app/buildSrc/src/main/kotlin/java-version.gradle.kts
plugins {
    `java-library`
}

java {
    sourceCompatibility = JavaVersion. VERSION_11
    targetCompatibility = JavaVersion. VERSION_11
}

tasks.withType<KotlinCompile> {
    kotlinOptions {
        jvmTarget = "11"
    }
}

dependencies {
    implementation(kotlin("stdlib"))
    implementation(kotlin("reflect"))
}

app/buildSrc/build.gradle.kts
plugins {
    `kotlin-dsl`
}

repositories {
    jcenter()
}

сейчас я получаю
e: C:\Users\mar15\git\sme-overdraft-origination\buildSrc\src\main\kotlin\java-version.gradle.kts: (12, 16): Unresolved reference: KotlinCompile
e: C:\Users\mar15\git\sme-overdraft-origination\buildSrc\src\main\kotlin\java-version.gradle.kts: (12, 31): Type mismatch: inferred type is () -> Unit but Class was expected
e: C:\Users\mar15\git\sme-overdraft-origination\buildSrc\src\main\kotlin\java-version.gradle.kts: (13, 5): Unresolved reference: kotlinOptions
e: C:\Users\mar15\git\sme-overdraft-origination\buildSrc\src\main\kotlin\java-version.gradle.kts: (14, 9): Unresolved reference: jvmTarget
основная проблема в том, как объяснить Градлу, что у меня есть класс этого таска в проекте?  потому что он упрямо твердит, что ее нет)
Я даже с костылями смог добавить в плагины kotlin("jvm"), который как раз и должен по идее содержать этот класс, но все безрезультатно
Вариант с костылями:
  import org.gradle.kotlin.dsl.accessors.runtime.addExternalModuleDependencyTo

  plugins {
        `java-library`
        kotlin("jvm")
  }

  fun org.gradle.api. Project. `java`(configure: org.gradle.api.plugins. JavaPluginExtension.() - > Unit): Unit =
  (this as org.gradle.api.plugins. ExtensionAware).extensions.configure("java", configure)

  fun Project.dependencies(configuration: DependencyHandlerScope.() - > Unit) =
  DependencyHandlerScope.of(dependencies).configuration()

  fun DependencyHandler. `implementation`(
        group: String,
        name: String,`введите сюда код`
        version: String?  = null,
        configuration: String?  = null,
        classifier: String?  = null,
        ext: String?  = null,
        dependencyConfiguration: Action<ExternalModuleDependency>?  = null
  ): ExternalModuleDependency = addExternalModuleDependencyTo(
        this, "implementation", group, name, version, configuration, classifier, ext, dependencyConfiguration
  )

  java {
        sourceCompatibility = JavaVersion. VERSION_11
        targetCompatibility = JavaVersion. VERSION_11
  }

  tasks.withType<KotlinCompile> {
        kotlinOptions {
            jvmTarget = "11"
        }
  }

  этот вариант кажется оч с

  repositories {
        jcenter()
  }

Он мне не нравится, так как:

я вынужден костылять
я вынужден указывать в app/buldSrc/build.gradle.kts версию котлин плагина, а я не хотел бы этого. 

Я пытался перенести файли в основной каталог сборки(не buldSrc) в котором плагин котлина по идее уже доступен.  Соответственно импортирую я его уже вот так 
app/build.gradle.kts
subprojects {
   apply(from = "java-version-2.gradle.kts")
}

но там так же самая проблема - gradle не видит класс KotlinCompile
app/java-version2.gradle.kts
plugins {
    `java-library`
    kotlin("jvm")
}

configure<org.gradle.api.plugins. JavaPluginExtension>{
    sourceCompatibility = JavaVersion. VERSION_11
    targetCompatibility = JavaVersion. VERSION_11
}

tasks.withType<org.jetbrains.kotlin.gradle.tasks. KotlinCompile> {
    kotlinOptions {
        jvmTarget = "11"
    }
}

dependencies {

    implementation(kotlin("stdlib"))
    implementation(kotlin("reflect"))
}

Есть ли вариант вынести настройку версии джавы по цивильному? 

A:

Проблема была в том, что не понимал как добавить зависимость на котлин в buldSrc
Сейчас оно работает:
app/buildSrc/build.gradle.kts
plugins {
`kotlin-dsl`
`kotlin-dsl-precompiled-script-plugins`
`java-gradle-plugin`
}

repositories {
    jcenter()
}

kotlinDslPluginOptions {
    experimentalWarning.set(false)
}

//придумать как вынести отсюда это
object PluginVersions {
    const val kotlin = "1.3.71"
}

dependencies {
    implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:${PluginVersions.kotlin}")
}

app/buildSrc/src/main/kotlin/java-version.gradle.kts
package custom

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

//TODO какое бы название этого плагина тут было бы уместнее? 
plugins {
    kotlin
    java
}

java {
    sourceCompatibility = Version.java
    targetCompatibility = Version.java
}

tasks.withType<KotlinCompile> {
    kotlinOptions {
        jvmTarget = Version.java.toString()
    }
}

dependencies {
    implementation(group = "org.jetbrains.kotlin", name = "kotlin-reflect")
    implementation(group = "org.jetbrains.kotlin", name = "kotlin-stdlib-jdk8")
    implementation(group = "io.github.microutils", name = "kotlin-logging", version = Version.Kotlin.logging)
}

и в нужных модулях просто
apply(plugin = "custom.java-version")

