2015-10-23 4 views
1

Я определяю несколько проектов JVM/JS cross. Каждый из них содержит некоторый общий код scala JVM/JS, который я хочу извлечь в общий общий проект, от которого зависит каждый проект. Может ли кто-нибудь порекомендовать мне лучший способ определить мои файлы build.scala для общих и зависимых проектов?Как зависеть от общего crossProject

ответ

0

В итоге я пришел к решению ниже.

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(... 
1

Вы можете создать Multi-project builds

Допустим, у вас есть структура проекта, как это;

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

Вы можете легко определить зависимости в 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) 

... 
3

CrossProject поддерживает нормальную работу dependsOn вы привыкли. Таким образом, вы можете:

// 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 

Существует full example на GitHub.

+0

Когда я делаю это я получаю утверждение не удалось: "Справочник ... общие/JS не содержится в корне сборки ... p1". Общий проект должен быть полностью независим от других проектов, поэтому он не должен быть подпроектом любого из других. – user79074

+0

Я не могу воспроизвести это (обновил ответ, чтобы содержать точный файл сборки, который я использую). Я использую sbt 0.13.7. Не могли бы вы дать мне суть того, что вы используете? Также вы могли бы дать мне вывод «sbt> projects»? – gzm0

+0

Я получил решение ниже. Не уверен точно, как я там оказался честным! Использование sbt 13.8 и scala.js 0.6.5 – user79074