【问题标题】:How SBT multi-project share the same actor systemSBT 多项目如何共享同一个actor系统
【发布时间】:2018-08-08 02:15:24
【问题描述】:

我正在研究 SBT 多项目解决方案。

现在我有:

  • 顶级项目测试环境
  • 子项目测试核心
  • 子项目test-proj1
  • 子项目test-proj2

这样的层次结构:

测试环境

  • 源代码
  • 项目
  • build.sbt
  • 测试核心
    • 源代码
    • build.sbt
  • 测试项目1
    • 源代码
    • build.sbt
  • 测试项目2
    • 源代码
    • build.sbt

我想在 test-core 中放置一些主要功能和对象,例如 akka ActorSystem,可以在 test-proj1 和 test-proj2 中引用。 这可以通过在 test-env 的 build.sbt 中写入项目依赖来完成,如下所示:

val env = (project in file(".")) 
val core = (project in file("test-core"))
    .aggregate(proj1,proj2)
    .settings(
        run / aggregate := true
    )
lazy val coreRef = LocalProject("core") 
lazy val proj1 = (project in file("test-proj1")).dependsOn(coreRef) 
lazy val proj2 = (project in file("test-proj2")).dependsOn(coreRef)

但问题是:
当我通过 test-proj1 和 test-proj2 引用 test-core 中定义的 ActorSystem 时,它们不是同一个 ActorSystem。
而且我不想把它们都放在一个项目中,把 proj1 和 proj2 做成一个包。
那么如何通过这个项目层次结构引用相同的 ActorSystem 呢?

【问题讨论】:

  • Actor 在运行时存在。它们与 sbt、maven 或 gradle 完全没有关系。 Actor Systems 是 JVM 中的运行时实体,因此同一个 JVM 应用程序中的所有 Actor 可以共享同一个 ActorSystem。甚至其他一些 JVM 应用程序也可以与允许远程交互的 ActorSystem 进行交互。
  • @SarveshKumarSingh 是的,ActorSystem 与 sbt 没有关系。我只想在 proj1、proj2 和 core 运行时使用相同的 ActorSystem 实例。不是三个 ActorSystems 相互交互。我仍然想在子项目级别而不是包级别上组织项目。我想弄清楚如何或为什么不。

标签: scala sbt akka projects-and-solutions class-hierarchy


【解决方案1】:

两个子项目有两个主要功能。
两个主要功能意味着两个应用程序。
两个应用程序意味着两个过程。
默认情况下,两个进程意味着不共享任何内容。

所以上面说的子项目层次并不能解决“同一个ActorSystem实例”的问题。

【讨论】:

    猜你喜欢
    • 2013-01-25
    • 2013-01-04
    • 2015-04-15
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 2015-12-12
    • 2013-11-12
    • 1970-01-01
    相关资源
    最近更新 更多