使 SBT 子项目中的编译操作依赖于其他子项目的编译,而无需将它们添加到类路径中



出于某些原因,我想编译一个子项目a需要编译b而不b出现在a的类路径中。相反,a类将通过动态加载来访问它们(是的,这通常是一个坏主意,但这是一项要求)。这个问题之前在以前的 SBT 版本中被问过,例如,如何依赖其他任务并在 SBT 0.10 中编写代码?我试过了

(compile in (a, Compile)) <<= (compile in (b, Compile), compile in (a, Compile)) {
  (_, out) => out
}

(基于上述答案)和

(compile in (a, Compile)) := {
  (compile in (b, Compile)).value
  (compile in (a, Compile)).value
}

在 SBT 0.13.9 中似乎都不起作用。

您可以使用

dependsOn运算符覆盖模块a设置中的默认compile行为。

lazy val a = Project(...)
    .settings(compile in Compile <<= compile in Compile dependsOn (compile in Compile in b))

最新更新