Как ссылаться на внешний проект sbt из другого sbt-проекта?
У меня есть следующая настройка приложения Scala и общей основной библиотеки:
корень
-> /ApplicationA
-> /project
-> /build.sbt
-> /CoreLibrary
-> /project
-> /build.sbt
Я хочу добавить ссылку из ссылки ApplicationA на CoreLibrary на проект Eclipse, чтобы каждый раз, когда CoreLibrary меняет ApplicationA, также создается. Я попробовал следующее содержимое build.Scala для ApplicationA:
val core = Project(
id = "platform-core",
base = file("../CoreLibrary"))
val main = Project(id = "application, base = file(".")).dependsOn(core)
Однако при компиляции ApplicationA SBT жалуется, что зависимость может быть только подкаталогом!!:
java.lang.AssertionError: assertion failed: Directory C:\git\CoreLibrary is not contained in build root C:\git\ApplicationA
Это кажется совершенно простым, какой правильный способ иметь зависимость от этого проекта?
Ответы
Ответ 1
Вы можете сделать исходную зависимость от своего проекта следующим образом:
lazy val core = RootProject(file("../CoreLibrary"))
val main = Project(id = "application", base = file(".")).dependsOn(core)
У меня есть рабочий пример с сборкой мультимодальных игр: https://github.com/ahoy-jon/play2MultiModule/blob/master/playapp/project/Build.scala
Но я думаю, что правильный способ (это зависит от вашего контекста) заключается в создании
-> /project/
-> Build.scala
-> /ApplicationA
-> /project
-> /build.sbt
-> /CoreLibrary
-> /project
-> /build.sbt
ссылаясь на два проекта и зависимости между ними.
Ответ 2
С sbt 0.12.1 кажется возможным получить простую ссылку на проект:
Я использовал ProjectRef
вместо RootProject
http://www.scala-sbt.org/0.12.1/api/sbt/ProjectRef.html
ProjectRef(file("../util-library"), "util-library")
sbt-eclipse также работает.
Ответ 3
Так как sbt 0.13, вы можете создавать определения для нескольких проектов непосредственно в .sbt
, не нуждаясь в файле Build.scala
.
Таким образом, было бы достаточно добавить следующее к ApplicationA/project/build.sbt.
lazy val core = RootProject(file("../CoreLibrary"))
val main = Project(id = "application", base = file(".")).dependsOn(core)