将 Groovy 个任务 build.gradle 转换为 kotlin kts 文件

Converting Groovy tasks build.gradle to kotlin kts file

我正在尝试将 Groovy 中的 build.gradle 文件转换为 kotlin .kts 文件,我在 gradle 文件中有一些我不知道如何正确转换的任务

task androidJavadocs(type: Javadoc) {
    failOnError = false
    source = android.sourceSets.main.java.srcDirs
    ext.androidJar = "${android.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar"
    classpath += files(ext.androidJar)
    exclude '**/R.html', '**/R.*.html', '**/index.html'
}

task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
    classifier = 'javadoc'
    from androidJavadocs.destinationDir
}

我不太明白如何使用“类型”,我正在走这条路

val androidJavadocs by tasks.withType<Javadoc>(){

}

但它给我错误

Type 'DomainObjectCollection<Javadoc!>' has no method 'getValue(Build_gradle, KProperty<*>)' and thus it cannot serve as a delegate

如何将这些 groovy 任务正确转换为 kotlin 任务?

您可以使用 named() 方法配置现有任务,使用 register() 方法创建新任务。

tasks {
    register<Javadoc>("androidJavadocs") {
        // Task's body here
    }
}

// or

tasks.register<Javadoc>("androidJavadocs") {
    // Task's body here
}

如果你想使用 Kotlin 委托属性

val androidJavadocs by tasks.registering(Javadoc::class) {
    // Task's body here
}

您问题的完整答案

val androidJavadocs by tasks.registering(Javadoc::class) {
    isFailOnError = false
    source = android.sourceSets.main.java.srcDirs
    ext["androidJar"] = "${android.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar")
    classpath += files(ext["androidJar"])
    exclude("**/R.html", "**/R.*.html", "**/index.html")
}

val androidJavadocsJar by tasks.registering(Jar::class) {
    classifier = "javadoc"
    dependsOn(androidJavadocs)
    from(androidJavadocs.get().destinationDir)
}