scala - SBT:在不发布的情况下依赖其他 SBT 项目

标签 scala build-automation sbt

我有一组松散相关的组件,其中一些依赖于其他组件。为了具体起见,让我们假设我们有组件“common”、“a”和“b”。 “common”没有任何依赖关系,但所有其他项目都使用“common”。此外,“a”取决于“b”。所有组件都是用 Scala 编写的,我想使用 sbt 来构建它们。

拥有以下属性会很好:

  • 多个人在不同的项目上工作,这就是为什么我们不希望有一个单一的存储库,而是每个项目一个存储库。
  • 构建项目应该很容易,并且所有依赖项都应该自动构建(如果需要)。也就是说,如果我修改“common”然后构建“b”,这应该首先构建“common”,然后继续构建“b”。
  • 能够在 IDE 中拥有所有项目,以便重构和类似的 IDE 任务正常工作,并且所有受影响的项目都可以正确更改。

  • 据我所知,在 sbt 中存在这种依赖有两种可能性;我们要么使用子项目,要么使用托管依赖项(推送到某处,例如本地)。但是,这两个选项似乎都没有提供上述 (1) 或 (2)。特别是
  • 使用子项目迫使我们使用单个存储库,因为所有子项目都必须在主项目的子目录中。
  • 在本地发布项目并使用托管依赖项很麻烦,因为更改“common”然后构建“b”只会在首先构建和发布该项目的情况下获取“common”中的更改。我可以看到托管依赖项在许多情况下都很有用,但对于我们的特定用例,它们似乎效果不佳。我们经常在多个项目上工作并同时更改它们。出于这个原因,必须发布通常看起来过于复杂。

  • 真的没有办法说一个 sbt 项目依赖于某个(相对)位置的另一个 sbt 项目,并且让 sbt 弄清楚何时建立依赖关系?

    最佳答案

    通过 SBT,您可以使用源依赖项。

    lazy val root = Project("root", file("."), settings = ...) dependsOn(dispatchLiftJson)
    
    lazy val dispatchLiftJson = uri("git://github.com/dispatch/dispatch-lift-json#0.1.0")
    

    在这个例子中,它将从 git 中获取。您可以在磁盘上指定文件位置,但我找不到示例。可能
    lazy val dep = file("/path/to") 
    

    或者
    lazy val dep = uri("file:///path/to")
    

    我自己也在为此苦苦挣扎 - 目前我正在使用运行正常的发布本地方法。

    关于scala - SBT:在不发布的情况下依赖其他 SBT 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12764795/

    相关文章:

    scala - 在flakey测试失败之前,如何连续sbt测试?

    Scala FlatMap 提供错误的结果

    java - 让aspectj与scala模型一起工作

    scala - 在 Scala 中定义日志记录特征时出现问题

    java - 在 Java 程序中使用 Apache Ant API 以编程方式构建源文件

    WiX 未定义的预处理器变量

    scala - 如何在编译 Scala 文件之前在 SBT Build.scala 中运行 Scala 代码?

    scala - 在没有隐式证据对象的情况下直接使用 Scala 类型类

    powershell - TFS 构建 : `Microsoft.TeamFoundation.PowerShell' is not installed on this computer

    scala - SBT 在编译混合项目时给出 "class file has wrong version 51.0, should be 49.0"?