Sbt 插件与编译器插件
Sbt Plugins vs Compiler Plugins
我试图理解为什么在项目的 plugins.sbt 中添加 sbt 插件,工作得很好,但是如果我在该文件中添加编译器插件,它就不起作用了?
我认为项目中的任何 .sbt 或 .scala 文件都可用于构建定义。
编译器插件工作的唯一地方是 build.sbt。因此我很困惑为什么?
特别是我正在使用 Kind-Projector
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 而不能添加到项目/
中的 plugins.sbt
记住 sbt 是递归的。
.sbt
定义当前层可用的东西。
.scala
个文件定义了将在下一层中可用的薄层。
在 project/bar.sbt
中添加 sbt 插件就是将该插件添加到元层,因此元层编译 sbt 你正在用来编译你的项目将这些插件添加到下一个 sbt 层。
因此,如果您在 project/foo.sbt
中添加编译器插件,那么您就是将该编译器插件添加到用于编译项目 (meta) 层的编译器 sbt,但在sbt的当前层将不可用。这就是为什么在 build.sbt
文件中添加编译器插件的原因,所以它们被添加到用于编译代码的编译器中。
我试图理解为什么在项目的 plugins.sbt 中添加 sbt 插件,工作得很好,但是如果我在该文件中添加编译器插件,它就不起作用了?
我认为项目中的任何 .sbt 或 .scala 文件都可用于构建定义。
编译器插件工作的唯一地方是 build.sbt。因此我很困惑为什么?
特别是我正在使用 Kind-Projector
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 而不能添加到项目/
中的 plugins.sbt记住 sbt 是递归的。
.sbt
定义当前层可用的东西。
.scala
个文件定义了将在下一层中可用的薄层。
在 project/bar.sbt
中添加 sbt 插件就是将该插件添加到元层,因此元层编译 sbt 你正在用来编译你的项目将这些插件添加到下一个 sbt 层。
因此,如果您在 project/foo.sbt
中添加编译器插件,那么您就是将该编译器插件添加到用于编译项目 (meta) 层的编译器 sbt,但在sbt的当前层将不可用。这就是为什么在 build.sbt
文件中添加编译器插件的原因,所以它们被添加到用于编译代码的编译器中。