如何在使用scala-js crossCompile时为子项目启用插件()?

时间:2016-10-07 14:09:25

标签: sbt scala.js

请注意,这不是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)

我正在使用带有两个更改行(on github)的scala-js交叉编译项目的规范示例。

正如您可以检查的那样,唯一的区别是我在plugins.sbt中添加了另一个插件:

addSbtPlugin("org.scala-sbt.plugins" % "sbt-xjc" % "0.8")

我将此行添加到buid.sbt

的末尾
fooJVM.enablePlugins(SbtXjcPlugin)

不可否认,这是一个人为的例子,但我确实有理由想要为JVM项目启用插件,如有必要,我可以详细介绍。

1 个答案:

答案 0 :(得分:1)

您不得在fooJVM上拨打任何内容(文档中的pitfalls部分说明了这一点。)

相反,请使用jvmConfigure

lazy val foo = crossProject.in(file(".")).
   // stuff
   jvmConfigure(_.enablePlugins(SbtXjcPlugin))

您需要执行此操作的原因是enablePlugins返回已修改的Project的新实例。因此,foo.jvmfooJVM不再是同一个项目了。

但是,正如您可能会注意到的,这不是您的构建文件失败的原因:在您的特定情况下,构建失败,因为sbt不允许这样的“裸”语句。这是有道理的,因为它们由于同样的原因没有做任何事情:enablePlugins在启用插件的情况下返回新的Project但不会改变接收器。