如何从另一个sbt项目引用外部sbt项目?

时间:2012-07-25 15:36:47

标签: scala sbt

我有一个Scala应用程序和一个通用核心库的以下设置: 根

 -> /ApplicationA
   -> /project
     -> /build.sbt
 -> /CoreLibrary
   -> /project
     -> /build.sbt

我想从ApplicationA添加一个引用到Eclipse项目引用的CoreLibrary,这样每次CoreLibrary更改时,ApplicationA也会被构建。我尝试了针对ApplicationA的build.Scala的以下内容:

  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

这看起来非常简单,这种项目依赖的正确方法是什么?

3 个答案:

答案 0 :(得分:45)

您可以像这样对项目执行源依赖:

 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

引用这两个项目及它们之间的依赖关系。

答案 1 :(得分:21)

使用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也有效。

答案 2 :(得分:12)

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)