似乎无法在 SBT 中的分叉 JVM 中运行 Play 应用程序

Posted

技术标签:

【中文标题】似乎无法在 SBT 中的分叉 JVM 中运行 Play 应用程序【英文标题】:Cannot seem to run Play application in a forked JVM from within SBT 【发布时间】:2022-01-13 17:52:00 【问题描述】:

我有一个使用 构建的 Scala Play Framework 网络应用程序(使用 Scala v2.13.7 和 Play v2.8.8) SBT (v1.5.5)。

我的build.sbt 包括以下内容:

lazy val root = (project in file("."))
.enablePlugins(PlayScala)
.settings(

  // etc.

  fork := true,
  javaOptions ++= Seq(
    "-Xms1G",
    "-Xmx8G",
  ),
)

但是,当我执行 sbt run 时,不会为 Web 应用程序生成单独的 JVM,并且内存设置是 SBT JVM 的设置(-Xms1024m-Xmx1024m)。

PlayScala 插件在运行 Web 应用程序本身时会干扰或禁用分叉吗?我可以强制 Web 应用程序使用 SBT 中的分叉 JVM 吗?

【问题讨论】:

【参考方案1】:

根据 sbt 文档Forked JVM Options,您可能想要执行以下操作:

lazy val root = (project in file("."))
.enablePlugins(PlayScala)
.settings(

  // etc.

  javaOptions ++= Seq(
    "-Xms1G",
    "-Xmx8G",
  ),
  fork := true,
  run / javaOptions += "-Xms1G -Xmx8G",
)

我对游戏不是很熟悉,但这应该可以解决您面临的问题。

【讨论】:

您似乎建议添加run / javaOptions 设置,对吗?问题是尽管设置了fork := true,但并未创建分叉进程,因此此更改没有任何区别。【参考方案2】:

让我自己进行长时间的调查,如果你想要做的只是影响 java 选项,将它们设置在一个名为 .jvmopts 的文件中(每行一个或一个都可以)在 sbt 项目根文件夹中(-as mentioned elsewhere 已经)。

【讨论】:

我意识到我可以做到这一点,但问题是我无法创建分叉进程,尽管 SBT 构建中存在forked := trueJava 选项只是为这里提出的问题添加风味,但我确实需要在运行时分叉 Web 应用程序。

以上是关于似乎无法在 SBT 中的分叉 JVM 中运行 Play 应用程序的主要内容,如果未能解决你的问题,请参考以下文章