在两个ScalaJS SBT项目之间使用DependsOn

时间:2016-07-06 01:15:14

标签: scala sbt scala.js

(未来很长的问题。简化tl;底部是博士。)

我有两个用SBT构建的ScalaJS项目 - " myapp"和" mylib",在以下目录结构中

root/build.sbt

root/myapp/build.sbt
root/myapp/jvm/
root/myapp/js/
root/myapp/shared/

root/mylib/build.sbt
root/mylib/jvm
root/mylib/js
root/mylib/shared

lib导出一个名为" com.example:mylib:0.1"的工件,它用作myapp的库依赖项。

myapp和mylib位于不同的存储库中,包含自己的构建文件,并且应该能够完全单独构建(即它们必须包含各自的构建配置)。

在制作中,它们将单独构建,mylib首先作为maven工件发布,然后再单独构建myapp

然而,在开发中,我希望能够将它们合并到父SBT项目中,以便两者可以并行开发,而无需在每次更改后使用publishLocal

在传统(不是scalajs)项目中,这将非常容易

$ROOT/build.sbt:

lazy val mylib = project
lazy val myapp = project.dependsOn(mylib)

但是在ScalaJS中,我们实际上在每个模块中都有两个项目 - appJVMappJSlibJVMlibJS。因此,上述配置仅查找聚合根项目,并且未将dependsOn配置正确应用于实际的JVM和JS项目。

(即myapp和mylib build.sbt每个包含两个项目,以及一个聚合根项目)

理想情况下,我希望能够执行以下

之类的操作
lazy val mylibJVM = project
lazy val myappJVM = project.dependsOn(mylibJVM)

lazy val mylibJS = project
lazy val myappJS = project.dependsOn(myappJS)

不幸的是,这只是在根目录中创建新项目,而不是自己导入子项目。

我也尝试了各种路径组合(例如)

lazy val mylibJVM = project.in(file("mylib/jvm"))

但是这并没有在mylib

中的build.sbt文件中看到配置

最终我继续遇到同样的问题 - 当将现有的多项目SBT项目导入父sbt文件时,它会导入根项目,但似乎没有提供从现有多模块导入子项目的方法SBT文件的方式允许我添加dependsOn配置。

tl; dr

如果我有

  • root/mylib/build.sbt已定义多个项目并且
  • root/myapp/build.sbt定义了多个项目

是否可以将单个子项目导入root/build.sbt而不是子模块中的根项目?

即。我可以有两层多项目构建。

0 个答案:

没有答案