Подтвердить что ты не робот

Как ссылаться на внешний проект 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

Это кажется совершенно простым, какой правильный способ иметь зависимость от этого проекта?

4b9b3361

Ответ 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)