sbt:在多项目构建中,如何从项目A调用项目B的任务?

时间:2015-05-28 17:38:39

标签: scala sbt scala.js

我有一个用于多个项目的Build.scala。

其中两个项目使用ScalaJs交叉编译。

其他一个项目是一个纯Scala项目,它想要访问一些ScalaJs生成的Javascript文件。

(最好只从ScalaJs项目中访问那些.js文件,但我正在尝试在现有项目层次结构的基础上添加用ScalaJs实现的功能,其中REST API已在其中一个中实现现有项目,没有彻底改变后者。)

理想情况下,我想在“app”项目中添加一项新任务,即

  1. 调用(fastOptJS或fullOptJS)并在ScalaJs项目上编译
  2. 将在eposject中构建的.js文件复制到应用程序项目
  3. 在app项目上调用compile
  4. 我知道如何通过调用另一个任务来扩展任务,但是当调用的任务不在同一个项目中时,我不知道该怎么做。

    这可能吗?

    或者还有另一种方法吗?

    我考虑在ScalaJs项目中扩展fastOptJS / fullOptJS,将.js文件“推送”到他们想要在app项目中的位置,但这感觉倒退了。 (也许这是最简单的方法吗?)

    感谢您的帮助, - 史蒂夫

1 个答案:

答案 0 :(得分:6)

最简单的方法是将fastOpt添加到“app”设置中的资源中:

resources in Compile += (fastOptJS in Compile in scalaJSProject).value.data

如果您需要将文件放在特殊位置,可以将资源生成器添加到复制fastOpt文件的“app”项目中:

resourceGenerators in Compile += Def.task {
  val trg = (resourceManaged in Compile).value / "jsStuff.js"
  IO.copyFile((fastOptJS in Compile in scalaJSProject).value.data, trg)
  Seq(trg)
}.taskValue