在 sbt 多项目构建中使用部署的工件而不是本地项目
Use deployed artifacts instead of local project in sbt multi project build
我有一个 sbt 多项目构建
lazy val a = project
lazy val b = project.dependsOn(a)
我一直致力于 a 和 b。有时我想发布一个新版本的b而不发布一个新版本的a。当然这需要b仍然兼容上次发布的a。我如何轻松测试这个?当我在 b 中编译和 运行 测试时,它将使用我的 a 的本地源代码,但这经常发生变化。相反,我想针对 a 的最后发布的工件编译和测试 b。我基本上需要能够暂时覆盖该行为。有什么想法:)?
这是一种打破所有项目间依赖关系的机制:
val useExternalDeps = settingKey[Boolean]("If true, we don't use inter-project dependencies")
lazy val a = project
lazy val b = project.dependsOn(a).settings(
useExternalDeps := false,
fullResolvers := {
if(!useExternalDeps.value) fullResolvers.value
else fullResolvers.value.filterNot(_.name == "inter-project")
}
)
只需在 sbt shell 中调用 set useExternalDeps := true
,然后 Ivy/sbt 将停止在项目之间寻找工件。
我有一个 sbt 多项目构建
lazy val a = project
lazy val b = project.dependsOn(a)
我一直致力于 a 和 b。有时我想发布一个新版本的b而不发布一个新版本的a。当然这需要b仍然兼容上次发布的a。我如何轻松测试这个?当我在 b 中编译和 运行 测试时,它将使用我的 a 的本地源代码,但这经常发生变化。相反,我想针对 a 的最后发布的工件编译和测试 b。我基本上需要能够暂时覆盖该行为。有什么想法:)?
这是一种打破所有项目间依赖关系的机制:
val useExternalDeps = settingKey[Boolean]("If true, we don't use inter-project dependencies")
lazy val a = project
lazy val b = project.dependsOn(a).settings(
useExternalDeps := false,
fullResolvers := {
if(!useExternalDeps.value) fullResolvers.value
else fullResolvers.value.filterNot(_.name == "inter-project")
}
)
只需在 sbt shell 中调用 set useExternalDeps := true
,然后 Ivy/sbt 将停止在项目之间寻找工件。