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

SBT类路径依赖与ScalaJS交叉编译项目,scala,sbt,cross-compiling,scala.js,Scala,Sbt,Cross Compiling,Scala.js,我有两个不同的独立项目A和B,它们都使用ScalaJS连接交叉编译项目的默认方式(请参见此处) 现在,我想以如下方式将SBT类路径依赖项从B添加到a: projectA.dependsOn(projectB) 其中,项目B的js部分可以使用项目A的js和shared部分,而jvm部分可以访问项目A的jvm和shared部分 当我使用upickle序列化数据时,我不能仅将librarydependency用于项目a的publishLocal(因为upickle需要关于项目a的编译时信息) 如何解

我有两个不同的独立项目A和B,它们都使用ScalaJS连接交叉编译项目的默认方式(请参见此处)

现在,我想以如下方式将SBT类路径依赖项从B添加到a:

projectA.dependsOn(projectB)
其中,项目B的
js
部分可以使用项目A的
js
shared
部分,而
jvm
部分可以访问项目A的
jvm
shared
部分

当我使用
upickle
序列化数据时,我不能仅将
librarydependency
用于项目a的
publishLocal
(因为
upickle
需要关于项目a的编译时信息)


如何解决此问题?

对于同一版本中的
交叉项目
,您只需使用
。dependsOn

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

// snip aJS, aJVM, bJS, bJVM
目前,无法像
RootProject
那样从URI/文件导入
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
,将其抽象出来。因此,如果您经常需要它,请随意使用,这样我们就可以更详细地查看它。

默认的
。dependsOn
between
CrossProject
应该正好提供这种行为。我可以从
uri
构建
CrossProject
(像普通根项目一样),以便从远程git repo中提取它吗?CrossProject的文档非常少,我还没有找到任何工厂方法/构造函数。
CrossProject
是一个在
build.sbt
中创建两个sbt项目的工厂,一个用于JVM,一个用于JavaScript,同时共享一些设置和其他定义。在这一点上,没有从远程存储库中提取数据。您能澄清一下您想做什么吗?项目A和项目B不共享目录结构,这意味着它们在磁盘(或不同的远程git存储库)上是分开的。问题归结为如何从
文件
Uri
创建
交叉项目
,就像可以从这两种引用构建
根项目一样。