У меня есть библиотека биткойнов с открытым исходным кодом, которая называется bitcoin-s. Если вы посмотрите на файл build.sbt , то увидите, что проект testkit
зависит от проекта rpc
, а проект rpc
зависит от проекта testkit
как зависимость публикации внутри нашего Deps.scala
файла.
Это прискорбно, потому что если мы вообще изменим API в проекте rpc, мы должны опубликовать новый снимок testkit, чтобы иметь возможность отражать изменения в API 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