首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有testkit sbt的循环项目依赖项

带有testkit sbt的循环项目依赖项
EN

Stack Overflow用户
提问于 2019-01-08 02:52:07
回答 2查看 307关注 0票数 2

我有一个名为比特币的开源比特币库。如果您查看build.sbt文件,您将看到testkit项目依赖于rpc项目,而rpc项目依赖于testkit项目作为Deps.scala文件中的发布依赖项。

这是不幸的,因为如果我们在rpc项目中更改api,我们必须发布一个新的testkit快照,以便能够反映rpc中的更改,然后在rpc项目中运行测试。您可以看到构建过程这里的更详细指南。

我希望这样做,这样我们就可以让每个项目在build.sbt中相互依赖,如下所示:

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-16 15:35:50

打破依赖周期。

这样做的一种方法可能是将rpc分解为单独的rpcrpc-test项目,因此您的依赖关系图是

代码语言:javascript
复制
rpc-test >--+--> testkit >--+
             \               \
              +---------------+--> rpc
票数 2
EN

Stack Overflow用户

发布于 2019-02-15 16:55:47

你试过这样的东西吗,但我不确定这样做是否有效。

代码语言:javascript
复制
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...
    )
  )
  • 聚合意味着在聚合项目上运行任务也将在聚合项目上运行它。
  • 中间项目将完成这一过程,并充当这两个项目的连接器。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54084642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档