我有2个可运行的sbt项目(akka应用程序和另一个play应用程序)。
是否可以同时运行它们并使用〜reStart以便它们刷新对我的项目所做的任何更改?
关于正确执行此操作的任何提示,这样我也不会耗尽内存吗?
答案 0 :(得分:1)
如果您使用的是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-revolver是一个小把戏,它会在启动时杀死应用程序。将reStart
替换为run
时,它可以完美运行,但不会触发更改。
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 runWebServer
代替sbt 'project anothersubmodule;~run'
。
我已经创建了一个简单的演示项目,您可以找到here
为了开始,您可以只拨打:./starter.sh
注意:如果您不方便,可以安装screen
命令。
答案 1 :(得分:0)
打开两个不同的“终端”标签; cd 进入每个标签中的特定目录,然后使用SBT运行。
sbt run
对于多个Web应用程序,请指定其他端口:
sbt run -Dhttp.port=8888