【问题标题】:SBT: Dependency On Other SBT Project Without PublishingSBT:依赖于其他没有发布的 SBT 项目
【发布时间】:2012-09-27 16:54:22
【问题描述】:

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

最好有以下属性:

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

据我所知,在 sbt 中存在这种依赖有两种可能性;我们要么使用子项目,要么使用托管依赖项(即推送到某处,例如本地)。但是,似乎这两个选项都没有提供上述(1)或(2)。特别是

  • 使用子项目迫使我们使用单个存储库,因为所有子项目都必须位于主项目的子目录中。
  • 在本地发布项目并使用托管依赖项很麻烦,因为更改“common”然后构建“b”只会在首先构建和发布该项目的情况下获取“common”中的更改。我可以看到托管依赖项在许多情况下都很有用,但对于我们的特定用例,它们似乎不能很好地工作。我们经常在多个项目上工作并同时更改它们。出于这个原因,必须经常发布似乎过于复杂。

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

【问题讨论】:

    标签: scala build-automation sbt


    【解决方案1】:

    通过 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")
    

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

    【讨论】:

    • lazy val dep = uri("file:///path/to") 为我工作。相对路径也有效。示例:lazy val helloWorldProj = uri("file:///D:/EclipseProjects/helloworld")lazy val helloWorldProj = uri("../helloworld")
    • 如果我没记错的话,这些必须添加到 build.sbt 文件中?
    【解决方案2】:

    给定目录

    • /build/some_app/
    • /build/some_lib/

    文件/build/some_app/build.sbt

    lazy val someLib = ProjectRef(file("../some_lib"), "exportedSomeLib")
    // = RootProject(file("../some_lib")) also works?
    
    lazy val root = (project in file("."))
                    .dependsOn(someLib)
    

    /build/some-lib/build.sbt:

    lazy val exportedSomeLib = (project in file("."))
    

    警告:请注意,在这些文件的两个根范围内定义的项目并不总是会导致错误,但默默地会更改如果键(=值名称)在 .sbt 文件之间发生冲突,则为全局(?)范围。 ?

    【讨论】:

      猜你喜欢
      • 2018-03-20
      • 2019-04-11
      • 2014-05-29
      • 2011-08-27
      • 2017-02-26
      • 2014-12-27
      • 1970-01-01
      • 2011-05-30
      • 2015-12-12
      相关资源
      最近更新 更多