特定于项目的SBT JVM选项

特定于项目的SBT JVM选项,sbt,Sbt,对于一个项目,我需要使用特定的JVM选项(Dfile.encoding=UTF-8和许多内存/gc选项)启动SBT,但我不一定要将这些相同的选项应用于我拥有的每个SBT项目 我在中看到了对.sbtopts(特定于项目的SBT命令行选项)和.jvmopts(特定于项目的SBT JVM选项)文件的引用,如果在SBT项目的根目录中找到这些文件,它们应该支持这一点,但是SBT的标准Windows版本(我使用的是0.13.1)似乎忽视了他们 (sbt extras方法对我很有吸引力,因为假设在版本控制中跟

对于一个项目,我需要使用特定的JVM选项(Dfile.encoding=UTF-8和许多内存/gc选项)启动SBT,但我不一定要将这些相同的选项应用于我拥有的每个SBT项目

我在中看到了对
.sbtopts
(特定于项目的SBT命令行选项)和
.jvmopts
(特定于项目的SBT JVM选项)文件的引用,如果在SBT项目的根目录中找到这些文件,它们应该支持这一点,但是SBT的标准Windows版本(我使用的是0.13.1)似乎忽视了他们

(sbt extras方法对我很有吸引力,因为假设在版本控制中跟踪
.sbtopts
.jvmopts
,则希望构建项目的人不需要sbt配置。)

是否有当前机制来指定跨平台工作的特定于项目的SBT选项


更新:自从我最初提出这个问题以来,
.sbtopts
.jvmopts
现在是标准Linux版本SBT的一部分,不再需要SBT附加功能。但是,Windows版本仅支持
.jvmopts
,不识别
。sbtopts

您可以从生成配置中更改JVM选项。例如:

fork in run := true

javaOptions += "-Xmx1G"
fork选项很重要,因为在执行run任务时,sbt需要启动一个新的JVM,否则这些选项将不会应用于当前正在运行的JVM

本说明假设您使用的是sbt样式的构建;如果您使用的是基于Scala的构建(这就是我实际使用的构建),您应该将其编写为:

lazy val yourProject = Project(id = "some-project-id", base = file("./"),
  settings = Project.defaultSettings ++ Seq(
    fork in run := true,
    javaOptions += "-Xmx1G"
    // ...
  ))

看来项目(在增加了一些确定性的情况下)是要遵循的方法。

这是Windows上SBT(在编写本文时为v1.0.3)当前版本的公认限制(它不识别项目根目录中的
.sbtopts
)。所有版本现在都支持
.jvmopts
文件

您可以在上跟踪此问题的状态


更新:该问题于2019年10月得到解决。感谢@conny指出这一点。

.jvmopts
中放置选项。sbtopts
是sbt extras提供的附加功能,sbt本身不支持。您应该尝试使用cygwin运行sbt extras。更正:sbt支持读取
。sbtopts
(在当前目录中)。sbt extras只添加了
.jvmopts
。但是
.sbtopts
就足够了:例如,您可以添加
-J-Xmx1G
so
.sbtopts
,而不是将
-Xmx1G
添加到
.jvmopts
。但是你是对的,
sbt.bat
脚本没有在Windows上读取它…@JacekLaskowski我的意思是sbt的标准bash运行程序(此处:)确实读取
.sbtopts
的内容,但遗憾的是Windows运行程序没有。尽管它是一个shell脚本,但它肯定是用SBT(0.13)本身打包的@gourlaysama的更正:更新的问题中提到了
.sbtopts
.jvmopts
。我在写这篇评论之前没有读过更新,所以如果你正在读这篇文章,你可能也没有读过更新!OP询问使用特定设置(而不是构建本身)运行sbt启动器。我不确定情况是否如此,因为他问:是否存在当前机制来指定跨平台工作的特定于项目的sbt选项?按照我介绍的方式,您甚至可以在多项目构建中逐个项目调整选项。不,Jacek是正确的。我最初的问题是如何配置SBT本身。出于某种原因(我想是因为Scala&SBT继承的Java相关历史原因),Windows文本文件的默认编码是
Windows-1252
,而对于其他操作系统,默认编码是
UTF-8
——这是跨平台兼容性的一个明显问题。(例如,Scalastyle SBT插件可以为不同的编码提供不同的结果。)此外,与SBT的默认配置相比,一个项目需要额外的内存资源——如果没有这些资源,构建通常会因内存错误而失败。