Scala Sbt插件与编译器插件

Scala Sbt插件与编译器插件,scala,sbt,Scala,Sbt,我试图理解为什么在项目中的plugins.sbt中添加sbt插件可以很好地工作,但是如果我在该文件中添加编译器插件,它就不能工作了 我认为项目中的任何.sbt或.scala文件都可以用于构建定义 编译器插件工作的唯一地方是build.sbt。因此,我不明白为什么 特别是,我和一个善良的投影仪一起工作 addCompilerPlugin("org.typelevel" %% "kind-projector" % "0.11.3" cros

我试图理解为什么在项目中的plugins.sbt中添加sbt插件可以很好地工作,但是如果我在该文件中添加编译器插件,它就不能工作了

我认为项目中的任何.sbt或.scala文件都可以用于构建定义

编译器插件工作的唯一地方是build.sbt。因此,我不明白为什么

特别是,我和一个善良的投影仪一起工作

addCompilerPlugin("org.typelevel" %% "kind-projector" % "0.11.3" cross CrossVersion.full)
我看到函数的以下别名

/** Adds `dependency` to `libraryDependencies` in the auto-compiler plugin configuration. */
def addCompilerPlugin(dependency: ModuleID): Setting[Seq[ModuleID]] =
libraryDependencies += compilerPlugin(dependency)

因此,只是想理解,是什么使它只能添加到build.sbt而不能添加到project/

中的plugins.sbt,记住sbt是递归的

.sbt
定义当前层中可用的内容。
.scala
文件定义了下一层中可用的thin

project/bar中添加一个sbt插件。sbt
就是将该插件添加到元层,例如,编译用于编译项目的sbt的元层会将这些插件添加到下一个sbt


因此,如果您在
project/foo.sbt
中添加一个编译器插件,那么您正在将该编译器插件添加到用于编译sbt的项目(元)层的编译器中,但它在sbt的当前层中不可用。这就是为什么编译器插件被添加到
build.sbt
文件中,因此它们被添加到用于编译代码的编译器中。

请记住sbt是递归的

.sbt
定义当前层中可用的内容。
.scala
文件定义了下一层中可用的thin

project/bar中添加一个sbt插件。sbt
就是将该插件添加到元层,例如,编译用于编译项目的sbt的元层会将这些插件添加到下一个sbt

因此,如果您在
project/foo.sbt
中添加一个编译器插件,那么您正在将该编译器插件添加到用于编译sbt的项目(元)层的编译器中,但它在sbt的当前层中不可用。这就是为什么编译器插件被添加到
build.sbt
文件中,所以它们被添加到用于编译代码的编译器中