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

SBT classpath dependency with ScalaJS crosscompile project

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

现在我想以类似于此的方式添加从 B 到 A 的 SBT 类路径依赖项:

projectA.dependsOn(projectB)

其中项目 B 的 js 部分可以使用项目 A 的 jsshared 部分,而 jvm 部分可以访问 jvmshared 部分项目 A.

因为我正在使用 upickle 序列化我的数据,所以我不能只将 libraryDependeny 与项目 A 的 publishLocal 一起使用(因为 upickle 需要编译时信息关于我的项目 A)。

我该如何解决这个问题?

对于 CrossProject 在同一版本中,您可以简单地使用 .dependsOn:

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

// snip aJS, aJVM, bJS, bJVM

目前,无法像 RootProject 一样从 URI/文件导入 CrossProject。然而,一个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 以便我们可以更详细地查看它。