Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 在build.gradle.kts中外部化任务_Kotlin_Build.gradle_Gradle Kotlin Dsl - Fatal编程技术网

Kotlin 在build.gradle.kts中外部化任务

Kotlin 在build.gradle.kts中外部化任务,kotlin,build.gradle,gradle-kotlin-dsl,Kotlin,Build.gradle,Gradle Kotlin Dsl,目前,我在central build.gradle.kts中有所有gradle任务的配置。由于这个文件将变得太长,我计划将至少一些任务应用到它们自己的文件中 目前,我的build.gradle.kts看起来有点像以下内容: import org.asciidoctor.gradle.jvm.AsciidoctorTask val revDate = System.getenv()["revdate"] ?: SimpleDateFormat("yyyy-MM-dd

目前,我在central build.gradle.kts中有所有gradle任务的配置。由于这个文件将变得太长,我计划将至少一些任务应用到它们自己的文件中

目前,我的build.gradle.kts看起来有点像以下内容:

import org.asciidoctor.gradle.jvm.AsciidoctorTask

val revDate = System.getenv()["revdate"] ?: SimpleDateFormat("yyyy-MM-dd").format(Date())
val revNumber = System.getenv()["revnumber"] ?: "DEV-Version"

plugins {
...
    id("org.asciidoctor.jvm.convert") version "3.1.0"
...
}

tasks.withType<AsciidoctorTask>().configureEach {
    setSourceDir(file("src/docs"))
    setOutputDir(file("$buildDir/docs"))

    attributes(
        mapOf(
            "source-highlighter" to "rouge",
            "toc"                to "left",
            "toclevels"          to 2,
            "idprefix"           to "",
            "idseparator"        to "-",
            "revnumber"          to "$revNumber",
            "revdate"            to "$revDate"
        )
    )
}
在build.gradle.kts中,并进一步定义上述使用的文件:

#gradle/asciidoctor.gradle.kts
import org.asciidoctor.gradle.jvm.AsciidoctorTask

buildscript {
    repositories {
        gradlePluginPortal()
    }
    dependencies {
        classpath("org.asciidoctor:asciidoctor-gradle-jvm:3.1.0")
    }
}

apply{
    plugin("org.asciidoctor.jvm.convert")
}

tasks.withType<AsciidoctorTask>().configureEach {
    setSourceDir(file("src/docs"))
    setOutputDir(file("$buildDir/docs"))

    attributes(
        mapOf(
            "source-highlighter" to "rouge",
            "toc"                to "left",
            "toclevels"          to 2,
            "idprefix"           to "",
            "idseparator"        to "-",
            "revnumber"          to "$project.revNumber",
            "revdate"            to "$project.revDate"
        )
    )
}
#gradle/asciidector.gradle.kts
导入org.ascidoctor.gradle.jvm.ascidoctor任务
构建脚本{
存储库{
gradlePluginPortal()
}
依赖关系{
类路径(“org.ascidoctor:ascidoctor gradle jvm:3.1.0”)
}
}
申请{
插件(“org.ascidoctor.jvm.convert”)
}
tasks.withType().configureEach{
setSourceDir(文件(“src/docs”))
setOutputDir(文件(“$buildDir/docs”))
属性(
地图(
“源荧光灯”至“胭脂”,
“toc”至“左”,
“TOC级别”至2级,
“idprefix”至“idprefix”,
“idseparator”至“-”,
“revnumber”到“$project.revnumber”,
“revdate”到“$project.revdate”
)
)
}
不幸的是,这不能正常工作,并且给了我一个例外,即找不到具有给定id('org.ascidoctor.jvm.convert')的插件

我使用的是gradle 6.6.1


我遗漏了什么,我应该做什么不同的事情?

在包含的脚本中,您只能获得默认环境。您无法访问主项目文件中应用的插件,并且无法应用任何其他插件。这与Groovy DSL不同,没有办法绕过它

相反,您必须将此逻辑放入buildSrc。Gradle Kotlin提供了预编译的脚本插件,使这非常容易。您可以创建一个文件
buildSrc/src/main/kotlin/my plugin.gradle.kts
,并在其中添加与在包含的脚本中添加的代码相同的代码

然后,在项目中,您可以将其添加到插件块中:

plugins { 
    `my-plugin`
}
此外,
buildSrc/build.gradle.kts
必须包含:

plugins {
    `kotlin-dsl`
}

repositories {
    jcenter()
    gradlePluginPortal()
}

有关更多信息,请参阅。

非常感谢:-)my-plugin.gradle.kts应该位于buildSrc/src/main/kotlin中,我必须将gradlePluginPortal()添加到存储库中。除此之外,它就像一个符咒。谢谢,我刚刚纠正了我答案中的错误。
plugins {
    `kotlin-dsl`
}

repositories {
    jcenter()
    gradlePluginPortal()
}