Я определяю несколько проектов JVM/JS cross. Каждый из них содержит некоторый общий код scala JVM/JS, который я хочу извлечь в общий общий проект, от которого зависит каждый проект. Может ли кто-нибудь порекомендовать мне лучший способ определить мои файлы build.scala для общих и зависимых проектов?Как зависеть от общего crossProject
1
A
ответ
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.
Когда я делаю это я получаю утверждение не удалось: "Справочник ... общие/JS не содержится в корне сборки ... p1". Общий проект должен быть полностью независим от других проектов, поэтому он не должен быть подпроектом любого из других. – user79074
Я не могу воспроизвести это (обновил ответ, чтобы содержать точный файл сборки, который я использую). Я использую sbt 0.13.7. Не могли бы вы дать мне суть того, что вы используете? Также вы могли бы дать мне вывод «sbt> projects»? – gzm0
Я получил решение ниже. Не уверен точно, как я там оказался честным! Использование sbt 13.8 и scala.js 0.6.5 – user79074