与ScalaJS交叉编译项目的SBT类路径依赖关系

时间:2016-12-02 14:10:04

标签: scala sbt cross-compiling scala.js

我有两个不同的独立项目A和B,它们都使用ScalaJS默认的交叉编译项目连接方式(参见这里:https://www.scala-js.org/doc/project/cross-build.html)。

现在我想以类似于这样的方式从B到A添加SBT Classpath Dependency:

projectA.dependsOn(projectB)

项目B的js部分可以使用项目A的jsshared部分,jvm部分可以访问jvm和{{ 1}}项目A的部分。

当我使用shared来序列化我的数据时,我不能只使用带有upickle项目A的libraryDependeny(因为publishLocal需要有关项目的编译时信息在我的情况下)。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

对于同一版本中的CrossProject,您只需使用.dependsOn

lazy val a = crossProject
lazy val b = crossProject.dependsOn(a)

// snip aJS, aJVM, bJS, bJVM

目前,无法从CrossProject这样的URI /文件中导入RootProject。但是,CrossProject只不过是两个正常的sbt项目。您可以单独导入这些:

// a.sbt

lazy val a = crossProject
lazy val aJS = a.js
lazy val aJVM = a.jvm

// b.sbt

lazy val b = crossProject.
  configureJS(_.dependsOn(aJS)).
  configureJVM(_.dependsOn(aJVM))

lazy val aJS = ProjectRef(file("projectA"), "aJS")
lazy val aJVM = ProjectRef(file("projectA"), "aJVM")

请注意,似乎没有理由我们无法创建一个CrossProjectRef来抽象远离你的东西。因此,如果您经常需要这样做,请随意open an issue,以便我们更详细地了解它。