user79074
user79074

Reputation: 5300

How to depend on a common crossProject

I am defining multiple JVM/JS cross projects. Each one contains some common JVM/JS scala code that I want to extract into a general common project that each project can depend on. Could someone recommend me the best way to define my build.scala files for the general and dependent projects?

Upvotes: 1

Views: 336

Answers (3)

user79074
user79074

Reputation: 5300

I ended up arriving at the solution below.

lazy val common = crossProject.in(file(".")).
    settings(
    ).
    jvmSettings(
    ).
    jsSettings(
    )

lazy val commonJVM = common.jvm
lazy val commonJS = common.js

...

lazy val p1 = crossProject.in(file(".")).
    settings(
    ).
    jvmSettings(
    ).
    jsSettings(
    ).
    jvmConfigure(_.dependsOn(ProjectRef(uri("../common"), "commonJVM"))).
    jsConfigure(_.dependsOn(ProjectRef(uri("../common"), "commonJS")))

lazy val p1JVM = p1.jvm.
    settings(...

lazy val p1JS = p1.js.
    settings(...

Upvotes: 1

gzm0
gzm0

Reputation: 14842

CrossProject supports the normal dependsOn operation you are used to. So you can:

// call to settings needed so for an implicit conversion to kick in
lazy val common = crossProject.settings() 
lazy val p1 = crossProject.dependsOn(common)
lazy val p2 = crossProject.dependsOn(common)

lazy val commonJVM = common.jvm
lazy val commonJS = common.js
lazy val p1JVM = p1.jvm
lazy val p1JS = p1.js
lazy val p2JVM = p2.jvm
lazy val p2JS = p2.js

There is a full example on GitHub.

Upvotes: 3

Fatih Donmez
Fatih Donmez

Reputation: 4347

You can create Multi-project builds

Let's say you have project structure like this;

root        
    project/Build.scala
    project1
        src/
        project1.sbt
    project2
        src/
        project2.sbt
    projectN
        src/
        projectN.sbt

You can easily define dependencies in Build.scala

lazy val root = Project(id = "Main-Project",
    base = file(".")) aggregate(project1, project2,..)

lazy val project2 = Project(id = "project2",
    base = file("project1")).dependsOn(project1)

...

Upvotes: 1

Related Questions