是否可以同时运行2个sbt项目?

时间:2020-04-07 17:30:10

标签: scala sbt

我有2个可运行的sbt项目(akka应用程序和另一个play应用程序)。

是否可以同时运行它们并使用〜reStart以便它们刷新对我的项目所做的任何更改?

关于正确执行此操作的任何提示,这样我也不会耗尽内存吗?

2 个答案:

答案 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
相关问题