我有一个名为比特币的开源比特币库。如果您查看build.sbt文件,您将看到testkit项目依赖于rpc项目,而rpc项目依赖于testkit项目作为Deps.scala文件中的发布依赖项。
这是不幸的,因为如果我们在rpc项目中更改api,我们必须发布一个新的testkit快照,以便能够反映rpc中的更改,然后在rpc项目中运行测试。您可以看到构建过程这里的更详细指南。
我希望这样做,这样我们就可以让每个项目在build.sbt中相互依赖,如下所示:
lazy val rpc = project
.in(file("rpc"))
.enablePlugins()
.settings(commonSettings: _*)
.dependsOn(
core,
testkit % "test->test"
)
.settings(
testOptions in Test += Tests.Argument("-oF")
)
lazy val bench = project
.in(file("bench"))
.enablePlugins()
.settings(assemblyOption in assembly := (assemblyOption in assembly).value
.copy(includeScala = true))
.settings(commonSettings: _*)
.settings(
libraryDependencies ++= Deps.bench,
name := "bitcoin-s-bench"
)
.dependsOn(core)
lazy val eclairRpc = project
.in(file("eclair-rpc"))
.enablePlugins()
.settings(commonSettings: _*)
.dependsOn(
core,
rpc
testkit % "test->test"
)
lazy val testkit = project
.in(file("testkit"))
.enablePlugins()
.settings(commonSettings: _*)
.dependsOn(
core,
rpc,
eclairRpc
)但是,这会在项目之间创建一个循环依赖关系,这将导致加载build.sbt时出现堆栈溢出。
有什么办法可以避免这种情况吗?目前,我们有一个非常复杂的过程来发布依赖关系,最终依赖于项目的SNAPSHOTS (而不是完整的版本)作为bitcoinsV。
发布于 2019-02-16 15:35:50
打破依赖周期。
这样做的一种方法可能是将rpc分解为单独的rpc和rpc-test项目,因此您的依赖关系图是
rpc-test >--+--> testkit >--+
\ \
+---------------+--> rpc发布于 2019-02-15 16:55:47
你试过这样的东西吗,但我不确定这样做是否有效。
lazy val middleProject = (project in file("middle-project"))
.settings(
name := "middle-project",
libraryDependencies ++= Seq(
// Dependencies here..
)
)
.aggregate(project1, project2)
.dependsOn(project1, project2)
lazy val project1 = (project in file("project-1"))
.settings(
name := "project-1",
libraryDependencies ++= Seq(
// Dependencies here...
)
)
lazy val project2 = (project in file("project-2"))
.settings(
name := "project-2",
libraryDependencies ++= Seq(
// Dependencies here...
)
)https://stackoverflow.com/questions/54084642
复制相似问题