2012-10-06 85 views
13

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

以下属性将是不错的有:

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

据我所知,在这种类型的依赖关系中有两种可能性:要么我们使用子项目,要么使用托管依赖项(将其推送到某处,例如本地)。但是,似乎这两个选项都不能提供上面的(1)或(2)。尤其是

  • 使用子项目迫使我们使用单个存储库,因为所有子项目都必须位于主项目的子目录中。
  • 本地发布的项目和使用管理的依赖很麻烦,因为不断变化的“共同”,然后建立“B”只有在该项目是建立并首次公布拿起“共同”的转变。我可以看到托管依赖对许多情况很有用,但对于我们的特定用例,它们似乎并不能很好地工作。我们经常在几个项目上工作,并同时进行更改。出于这个原因,经常出版似乎过于复杂。

难道真的没有办法说的SBT项目依赖于另一个项目SBT在一定的(相对)的位置,并具有SBT数字出来的时候建的依赖?

回答

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

在本例中它将从git中获取。您可能能够在磁盘上指定文件位置,但我找不到示例。利用发布本地方法,好的工作目前IM - 可能

lazy val dep = file("/path/to") 

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

我与这个自己奋斗。

+1

'lazy val dep = uri(“file:/// path/to”)'适用于我。相对路径也适用。实例:'懒惰VAL helloWorldProj = URI( “文件:/// d:/ EclipseProjects/HelloWorld” 的)'OR '懒惰VAL helloWorldProj = URI( “../的HelloWorld”)' – dips

+0

而这些必须被添加到该如果我没有错,build.sbt文件? –