I have 2 different separate projects A and B, both of which use the ScalaJS default way of wiring cross compile projects (see here: https://www.scala-js.org/doc/project/cross-build.html).
Now I want to add a SBT Classpath Dependency from B to A in a manner similar to this:
projectA.dependsOn(projectB)
where the js
part of project B can use the js
and shared
parts of project A and the jvm
part can access jvm
and shared
parts of project A.
As I am using upickle
for serializing my data, I cannot just use a libraryDependeny
with a publishLocal
of project A (as upickle
requires compile time information about project A in my case).
How can I solve this?
For CrossProject
's in the same build, you can simply use .dependsOn
:
lazy val a = crossProject
lazy val b = crossProject.dependsOn(a)
// snip aJS, aJVM, bJS, bJVM
Currently, there is no way to import a CrossProject
from a URI / File like a RootProject
. However, a CrossProject
is nothing more than a two normal sbt projects. You can import these individually:
// a.sbt
lazy val a = crossProject
lazy val aJS = a.js
lazy val aJVM = a.jvm
// b.sbt
lazy val b = crossProject.
jsConfigure(_.dependsOn(aJS)).
jvmConfigure(_.dependsOn(aJVM))
lazy val aJS = ProjectRef(file("projectA"), "aJS")
lazy val aJVM = ProjectRef(file("projectA"), "aJVM")
Note that there doesn't seem a reason we cannot create a CrossProjectRef
that abstracts this away from you. So if you need this often, feel free to open an issue so we can look at it in more detail.