我有两个可运行的sbt项目(akka应用程序和另一个play应用程序(。
是否可以同时运行它们,并使用~reStart,以便它们在对我的项目进行任何更改时刷新?
有什么技巧可以正确地做到这一点,这样我就不会耗尽内存了?
如果您使用的是Play Framework的最新版本,则可以在不使用任何插件的情况下使用~run
。关于独立的akka应用程序,您可以使用名为sbt-revolver 的库
runAkkaServer := {
(reStart in Compile in `akka-server`).evaluated
}
runWebServer := {
(~run in Compile in `web-server`).evaluated
}
mainClass in reStart := Some("com.example.MainAkka")
val runAkkaServer = inputKey[Unit]("Runs akka-server")
val runWebServer = inputKey[Unit]("Runs web-server")
注意:您可以在无需自定义任务的情况下以重新启动模式运行这两个应用程序:1.~run
-播放服务器2.reStart
-独立
更新:
我试着对他们两个都使用下面的命令,看来sbt左轮手枪有点像是在舞台上的一个恶作剧和杀戮应用程序。当用run
替换reStart
时,它可以完美地工作,但不会触发更改。
screen -d -m sbt runAppServer; screen -d -m sbt runWebServer
所以上面的代码并没有按预期运行。我们可以在单独的窗口中运行它们,而不是自定义任务,如下所示:
screen -dmS "appserver" sh -c "sbt 'project appserver;~reStart'; exec bash" ; screen -dmS "webserver" sh -c "sbt runWebServer; exec bash"
如果您愿意,也可以用sbt 'project anothersubmodule;~run'
替换sbt runWebServer
。
我创建了一个简单的演示项目,你可以在这里找到为了启动,您可以只调用:./starter.sh
注意:如果没有screen
命令,您可以安装它。
打开两个不同的终端选项卡cd到每个选项卡中的特定目录中,然后使用SBT运行。
sbt run
对于多个web应用程序,请指定不同的端口:
sbt run -Dhttp.port=8888