SBT:对没有出版的其他SBT项目的依赖

ste*_*fan 14 build-automation scala sbt

我有一组松散相关的组件,其中一些组件依赖于其他组件.为了具体,我们假设我们有"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项目,并且知道何时构建依赖项?

Iva*_*ith 6

使用SBT,您可以使用源依赖项.

lazy val root = Project("root", file("."), settings = ...) dependsOn(dispatchLiftJson)

lazy val dispatchLiftJson = uri("git://github.com/dispatch/dispatch-lift-json#0.1.0")
Run Code Online (Sandbox Code Playgroud)

它将在此示例中从git中获取.您可以在磁盘上指定文件位置,但我找不到示例.或者

lazy val dep = file("/path/to") 
Run Code Online (Sandbox Code Playgroud)

要么

lazy val dep = uri("file:///path/to")
Run Code Online (Sandbox Code Playgroud)

我正在努力解决这个问题 - 目前我使用的是发布 - 本地方法,它运行正常.