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

Ste*_*uer 1 scala sbt scala.js

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

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

其他项目之一是纯Scala项目,它希望访问一些ScalaJs生成的Javascript文件.

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

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

  1. 调用(fastOptJS或fullOptJS)并在ScalaJs项目上编译
  2. 将在eposject中构建的.js文件复制到app项目
  3. 在app项目上调用compile

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

这可能吗?

或者还有另一种方法吗?

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

谢谢你的帮助, - 史蒂夫

gzm*_*zm0 7

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

resources in Compile += (fastOptJS in Compile in scalaJSProject).value.data
Run Code Online (Sandbox Code Playgroud)

如果您需要将文件放在特殊位置,则可以将资源生成器添加到复制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
Run Code Online (Sandbox Code Playgroud)