似乎无法在 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 := true
。 Java 选项只是为这里提出的问题添加风味,但我确实需要在运行时分叉 Web 应用程序。以上是关于似乎无法在 SBT 中的分叉 JVM 中运行 Play 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
Surefire Maven 插件:“通过直接写入分叉 JVM 中的本机流来破坏 STDOUT”