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

sbt: In a multi-project build, how to invoke project B's task from project A?

我有多个项目的Build.scala。

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

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

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

理想情况下,我想向 "app" 项目添加一个新任务,即

  1. 调用(fastOptJS 或 fullOptJS)并在 ScalaJs 项目上编译
  2. 将在那些 eprojects 中构建的 .js 文件复制到应用程序项目
  3. 在应用项目上调用编译

我知道如何通过调用另一个任务来扩展任务,但是当调用的任务不在同一个项目中时我不知道该怎么做。

这可能吗?

或者还有其他方法吗?

我考虑过将 ScalaJs 项目中的 fastOptJS/fullOptJS 扩展到 "push" .js 文件到应用程序项目中他们想要去的地方,但这感觉倒退了。 (虽然这可能是最简单的方法?)

感谢您的帮助,--史蒂夫

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

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

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

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