我有一组松散相关的组件,其中一些组件依赖于其他组件。为了具体起见,我们假设我们有组件“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")
or
lazy val dep = uri("file:///path/to")
我自己正在努力解决这个问题 - 目前我正在使用工作正常的发布本地方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)