使用scala-js crossCompile时如何为子项目启用插件()?
How to enablePlugins() for subprojects when using scala-js crossCompile?
请注意,这不是 IntelliJ 错误,当在项目中启动 sbt
时直接从 SBT 运行 出现:
C:\Users\brand\Documents\GitHub\scalajs-cross-compile-example\build.sbt:27: error: type mismatch;
found : sbt.Project
required: sbt.internals.DslEntry
fooJVM.enablePlugins(SbtXjcPlugin)
我正在使用 scala-js 交叉编译项目的规范示例,其中更改了两行 (on github)。
如您所见,唯一的区别是我在 plugins.sbt 中添加了另一个插件:
addSbtPlugin("org.scala-sbt.plugins" % "sbt-xjc" % "0.8")
并且我将这一行添加到 buid.sbt
的末尾:
fooJVM.enablePlugins(SbtXjcPlugin)
不可否认,这是一个人为的例子,但我确实有理由只想为 JVM 项目启用插件,如有必要,我可以详细介绍。
您不得在 fooJVM
上调用任何内容(文档中的 pitfalls 部分对此进行了解释)。
而是使用 jvmConfigure
:
lazy val foo = crossProject.in(file(".")).
// stuff
jvmConfigure(_.enablePlugins(SbtXjcPlugin))
您需要这样做的原因是 enablePlugins
returns 修改了 Project
的新实例。所以 foo.jvm
和 fooJVM
不再是同一个项目。
但是,您可能会注意到,这不是构建文件失败的原因:在您的特定情况下,构建失败是因为 sbt 不允许这样的 "bare" 语句。这是有道理的,因为他们出于同样的原因没有做任何事情:enablePlugins
returns 启用插件但不改变接收器的新 Project
。
请注意,这不是 IntelliJ 错误,当在项目中启动 sbt
时直接从 SBT 运行 出现:
C:\Users\brand\Documents\GitHub\scalajs-cross-compile-example\build.sbt:27: error: type mismatch;
found : sbt.Project
required: sbt.internals.DslEntry
fooJVM.enablePlugins(SbtXjcPlugin)
我正在使用 scala-js 交叉编译项目的规范示例,其中更改了两行 (on github)。
如您所见,唯一的区别是我在 plugins.sbt 中添加了另一个插件:
addSbtPlugin("org.scala-sbt.plugins" % "sbt-xjc" % "0.8")
并且我将这一行添加到 buid.sbt
的末尾:
fooJVM.enablePlugins(SbtXjcPlugin)
不可否认,这是一个人为的例子,但我确实有理由只想为 JVM 项目启用插件,如有必要,我可以详细介绍。
您不得在 fooJVM
上调用任何内容(文档中的 pitfalls 部分对此进行了解释)。
而是使用 jvmConfigure
:
lazy val foo = crossProject.in(file(".")).
// stuff
jvmConfigure(_.enablePlugins(SbtXjcPlugin))
您需要这样做的原因是 enablePlugins
returns 修改了 Project
的新实例。所以 foo.jvm
和 fooJVM
不再是同一个项目。
但是,您可能会注意到,这不是构建文件失败的原因:在您的特定情况下,构建失败是因为 sbt 不允许这样的 "bare" 语句。这是有道理的,因为他们出于同样的原因没有做任何事情:enablePlugins
returns 启用插件但不改变接收器的新 Project
。