使用 sbt 和 Akka 微内核运行应用程序
Posted
技术标签:
【中文标题】使用 sbt 和 Akka 微内核运行应用程序【英文标题】:Running application with sbt and Akka Microkernel 【发布时间】:2015-03-29 06:42:01 【问题描述】:我可以在我的项目中同时使用两者吗?
以前我只有扩展 App
特征的对象,但自从我开始使用 Microkernel
后,我需要有扩展 Bootable
特征的类。
假设我有这样的事情:
lazy val backend = (project in file("backend"))
.enablePlugins(AkkaAppPackaging)
.enablePlugins(UniversalPlugin)
.settings(
name := "backend",
mainClass in Compile := Some("backend.Backend"),
libraryDependencies ++= Dependencies.backend,
javaOptions in run ++= Seq("-Djava.library.path=./sigar"),
fork in run := true)
.dependsOn(api)
.aggregate(api)
和这样的后端类:
class Backend extends Bootable
val system = ActorSystem("mobile-cluster")
def startup() =
FactorialBackend startOn system
def shutdown() =
system.shutdown()
我无法使用 sbt run
启动应用程序(缺少静态 main 方法时出错),但它适用于 Microkernel,当我运行 sbt stage
并下次使用生成的脚本启动应用程序时,它工作正常。
当我使用这样的东西时:
object Backend extends App
val system = ActorSystem("application")
FactorialBackend startOn system
我可以使用sbt "project backend" "run"
启动应用程序,但微内核不再工作。
我能用它做什么? 我应该有单独的文件来使用微内核和 sbt 启动应用程序还是单独的构建配置?
我需要有一个使用微内核的应用程序的生产版本,并且我还想在使用 sbt 的开发过程中运行和调试我的应用程序。
我尝试使用相同的类或对象同时扩展 App 和 Bootable trait 或将 sbt.build 配置为对 Microkernel 和 sbt run
进行单独配置,但没有帮助。
【问题讨论】:
【参考方案1】:一种解决方案是创建另一个模块,将可引导类放在那里并添加额外的构建配置:
lazy val backend = (project in file("backend"))
.settings(
name := "backend",
libraryDependencies ++= Dependencies.backend,
javaOptions in run ++= Seq("-Djava.library.path=./sigar"),
// this enables custom javaOptions
fork in run := true)
.dependsOn(api)
.aggregate(api)
lazy val boot = (project in file("boot"))
.enablePlugins(AkkaAppPackaging)
.enablePlugins(UniversalPlugin)
.settings(
name := "boot",
mainClass in Compile := Some("com.example.Boot"),
libraryDependencies ++= Dependencies.backend,
// this enables custom javaOptions
fork in run := true)
.dependsOn(backend)
.aggregate(api, backend)
现在我可以跑了
sbt "project backend" "run"
和
sbt "project boot" "stage"
【讨论】:
这是一个不错的解决方案。我首先想到了一个伴生对象,它使用App
扩展了您的Bootable
类,并且只执行startup
方法,如果您在引导部分没有太多工作,这是一个很好的解决方案。顺便说一句,感谢您试用我的激活器 :)【参考方案2】:
我认为您不需要 2 个模块。
您可以使用以下命令运行微内核
sbt "project backend" "run-main akka.kernel.Main Backend"
【讨论】:
【参考方案3】:通过 sbt 控制台执行这些指令:
runMain akka.kernel.Main Backend
【讨论】:
以上是关于使用 sbt 和 Akka 微内核运行应用程序的主要内容,如果未能解决你的问题,请参考以下文章
使用 akka-http 模板的新 sbt 应用程序,如何确定解析器并添加 maven Central?