【发布时间】: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