究竟什么是“此处不得使用 plugins {} 块。如果您需要强制应用插件”?

tri*_*oid 5 gradle gradle-plugin gradle-kotlin-dsl

我有一个使用 kotlin dsl 的 gradle 项目:

plugins {
    base
    kotlin("jvm") version "1.3.70" apply false
}


//val scalaV: String by project

//val ext = SpikeExt(this)



allprojects {
    apply(plugin = "java")
    apply(plugin = "scala")

    group = "com.tribbloids.scalaspike"
    version = "1.0.0-SNAPSHOT"

    repositories {
        mavenCentral()
        jcenter()
        maven("https://dl.bintray.com/kotlin/kotlin-dev")
    }

    dependencies {
    }
}

Run Code Online (Sandbox Code Playgroud)

当我运行 gradlew build 时,我遇到以下错误:

FAILURE: Build failed with an exception.

* Where:
Script '/home/peng/git/scalaspike/build.gradle.kts' line: 1

* What went wrong:
The plugins {} block must not be used here. If you need to apply a plugin imperatively, please use apply<PluginType>() or apply(plugin = "id") instead.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 870ms

Run Code Online (Sandbox Code Playgroud)

同时,完全相同的第 1 行在另一个项目中正常工作:

https://github.com/gradle/kotlin-dsl-samples/tree/master/samples/multi-kotlin-project

plugins {
    base
    kotlin("jvm") version "1.3.70" apply false
}

allprojects {

    group = "org.gradle.kotlin.dsl.samples.multiproject"

    version = "1.0"

    repositories {
        jcenter()
    }
}

dependencies {
    // Make the root project archives configuration depend on every sub-project
    subprojects.forEach {
        archives(it)
    }
}

Run Code Online (Sandbox Code Playgroud)

所以我有两个问题:

  1. 这是什么意思?
  2. 为什么同样的事情在第二个项目中有效,但在第一个项目中失败?有什么不同?