似乎无法在 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 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Windows 中启用 SBT 远程调试?

如何在我自己的项目中使用分叉的 SBT 插件

Surefire Maven 插件:“通过直接写入分叉 JVM 中的本机流来破坏 STDOUT”

干净的 sbt 项目中的 Scala Play 框架依赖项

如何指定 JVM 最大堆大小“-Xmx”以在 SBT 中运行具有“运行”操作的应用程序?

如何增加 sbt 在 Windows 下运行的 JVM 堆大小?