请注意,这不是IntelliJ错误,当在项目中启动sbt
时直接从SBT运行时出现:
C:UsersbrandDocumentsGitHubscalajs-cross-compile-examplebuild.sbt:27: error: type mismatch;
found : sbt.Project
required: sbt.internals.DslEntry
fooJVM.enablePlugins(SbtXjcPlugin)
我使用的是scala-js交叉编译项目的典型示例,其中有两行更改(在github上)。
你可以检查,唯一的区别是我添加了另一个插件到plugins.sbt:
addSbtPlugin("org.scala-sbt.plugins" % "sbt-xjc" % "0.8")
我在buid.sbt
的末尾添加了这一行:
fooJVM.enablePlugins(SbtXjcPlugin)
无可否认,这是一个有点人为的例子,但我确实有理由希望仅为JVM项目启用插件,如果有必要,我可以更详细地说明。
不能在fooJVM
上调用任何东西(文档中的陷阱部分解释了这一点)。
请使用jvmConfigure
:
lazy val foo = crossProject.in(file(".")).
// stuff
jvmConfigure(_.enablePlugins(SbtXjcPlugin))
您需要这样做的原因是enablePlugins
返回一个修改过的Project
的新实例。因此,foo.jvm
和fooJVM
不再是同一个项目了。
然而,您可能会注意到,这并不是构建文件失败的原因:在您的特定情况下,构建失败是因为sbt不允许这样的"裸"语句。这是有道理的,因为它们不做任何事情的原因相同:enablePlugins
返回一个新的Project
与插件启用,但不改变接收器。