首页 文章

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

提问于
浏览
50

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

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

  • 11

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

    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
    

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

  • 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也有效 .

  • 44

    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)
    

相关问题