从其他子项目触发 SBT 程序集

Trigger SBT assembly from other subproject

我有一个包含 3 个子项目和 sbt 配置文件的根项目,仅此而已。 2 个主要子项目称为 serverbackend,另一个称为 common 并且是两个主要项目的依赖项。 server 是 PlayFramework 项目。 backed 项目被配置为将程序集 jar 生成到 server.

的资源目录中

jar 已正确生成并且服务器能够看到它,但我不知道如何 运行 assembly 来自 backend 的任务 server 是已编译(即我希望服务器依赖于 backend.jar 的程序集)

/* [...] */

lazy val commonSettings = Seq(
  version := "0.1",
  organization := "org.example",
  scalaVersion := "2.11.7"
)

lazy val server = (project in file("server")).enablePlugins(PlayJava).settings(commonSettings: _*).settings(
  name := """example""",
  libraryDependencies ++= Seq(
    /* [...] */
  ),
  /* [...] */
  unmanagedResourceDirectories in Compile += { baseDirectory.value / "resources" }
).dependsOn(common)


lazy val backend = (project in file("backend")).settings(commonSettings: _*).settings(
  assemblyJarName in assembly := "backend.jar",
  assemblyOutputPath in assembly := server.base / "resources/backend.jar",
  libraryDependencies := Seq(

  )
).dependsOn(common)

lazy val common = (project in file("common")).settings(commonSettings: _*)

onLoad in Global := (Command.process("project server", _: State)) compose (onLoad in Global).value

感谢@pfn 的评论,我让它工作了。我需要做的一件事是在服务器子项目设置中插入这一行并将 server 更改为 Compile,所以现在是:

(compile in Compile) <<= (compile in Compile) dependsOn (assembly in backend)