Sbt 管理多项目常春藤依赖关系

Sbt 管理多项目常春藤依赖关系,sbt,Sbt,我有一个包含子项目foo和bar的多项目构建foo取决于栏 foo和bar都打算通过常春藤依赖项使用。因此,foo对bar具有库依赖性。然而,在我的多项目构建中,我不想使用常春藤依赖项。相反,我希望在指定的目录中查找foo和bar并使用这些目录中的版本进行构建。我想告诉SBT,“你要寻找的常春藤依赖实际上就是这个目录中的SBT项目。” 我希望所有这些都由SBT自动处理。也就是说,我不想进入bar并执行SBT“publish local”以使其工作 作为参考,我的多项目具有build.scala,

我有一个包含子项目
foo
bar
的多项目构建<代码>foo取决于

foo
bar
都打算通过常春藤依赖项使用。因此,
foo
bar
具有库依赖性。然而,在我的多项目构建中,我不想使用常春藤依赖项。相反,我希望在指定的目录中查找
foo
bar
并使用这些目录中的版本进行构建。我想告诉SBT,“你要寻找的常春藤依赖实际上就是这个目录中的SBT项目。”

我希望所有这些都由SBT自动处理。也就是说,我不想进入
bar
并执行SBT“publish local”以使其工作

作为参考,我的多项目具有
build.scala
,包括以下内容:

lazy val bar = project in file("bar")
lazy val foo = (project in file("foo")).dependsOn(bar)
lazy val myProject = (project in file(".")).dependsOn(foo, bar)

这显然会处理类路径依赖关系,但实际上不会将
bar
中的项目用于
foo
Ivy依赖关系。

不清楚“将bar项目视为Ivy依赖关系”的确切含义。如果使用
dependsOn
,则要在
foo
中导入代码的代码应该可以使用
bar
。你还想做什么?打包
bar
并将其作为JAR文件导入?还有别的事吗?抱歉说不清楚。我的意思是,
bar
被发布到常春藤回购协议中,
foo
bar
具有库依赖性。虽然
dependsOn
对于实际的Scala依赖性很好,但如果我正在开发和升级
bar
(并且没有发布它),那么我希望
foo
使用这个版本的
bar
,它不起作用,因为SBT抱怨它找不到常春藤回购(即使代码就在“bar”!)。如果我在
bar
中发布一个
publish local
,它确实可以工作,但SBT似乎应该能够自动处理这个问题,而不必手动发布。这有点像是瞎猜,但是如果将
dependsOn(bar)
替换为
dependsOn(bar%“compile->publish local”)
会发生什么?如果这不起作用,您可以定义一个自定义任务,该任务首先执行本地发布,然后编译
foo
。不幸的是,按照描述更改
dependsOn
不起作用。好主意!据我所知,在本地发布是唯一的方法。14天前sbt上有一个github问题,因此可能会出现更好的解决方案!