代码之家  ›  专栏  ›  技术社区  ›  triplem

将任务外部化生成.gradle.kts

  •  0
  • triplem  · 技术社区  · 5 年前

    目前我的生成.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"
            )
        )
    }
    

    以上生成.gradle.kts如果调用asciidctor任务,则生成我的文档。现在,我尝试使用

    apply {
        from("gradle/asciidoctor.gradle.kts")
    }
    

    在生成.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"
            )
        )
    }
    

    不幸的是,这不能正常工作,并给我一个例外,即插件与给定的id('org.ascidoctor.jvm.convert')未找到。

    我正在使用Gradle6.6.1。

    我错过了什么,我应该做些什么?

    0 回复  |  直到 5 年前
        1
  •  1
  •   Ingo Kegel    5 年前

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

    相反,您必须将此逻辑放入buildSrc。gradlekotlin提供了预编译的脚本插件,使之变得非常简单。创建一个文件 buildSrc/src/main/kotlin/my-plugin.gradle.kts 并在其中添加与包含的脚本中添加的代码相同的代码。

    然后,在您的项目中,您可以在plugins块中添加以下内容:

    plugins { 
        `my-plugin`
    }
    

    此外, buildSrc/build.gradle.kts 必须包含:

    plugins {
        `kotlin-dsl`
    }
    
    repositories {
        jcenter()
        gradlePluginPortal()
    }
    

    有关详细信息,请参见 Gradle documentation .