使用"sbt run"设置系统属性

aur*_*amo 18 sbt

我正在使用最新版本的SBT(似乎很难弄清楚版本是什么).我想将系统属性传递给我的应用程序,sbt run如下所示:

sbt -Dmyprop=x run
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做?

Sha*_*eep 16

SBT的运行器通常不会创建新进程,因此如果要设置传递的参数,还必须告诉它执行此操作.您可以在构建设置中添加以下内容:

fork := true

javaOptions := Seq("-Dmx=1024M")
Run Code Online (Sandbox Code Playgroud)

有关SBT文档中分叉过程的更多详细信息.


aka*_*ppi 10

我找到了将其添加到的最佳方法build.sbt:

// important to use ~= so that any other initializations aren't dropped
// the _ discards the meaningless () value previously assigned to 'initialize'
initialize ~= { _ =>
  System.setProperty( "config.file", "debug.conf" )
}
Run Code Online (Sandbox Code Playgroud)

相关:执行此操作以更改已加载的Typesafe配置(我的用例)时,还需要手动包含默认配置.为此,Typesafe配置的建议include "application"是不够的,但include classpath("application.conf")工作.考虑提及,因为其他一些人可能想要以完全相同的原因覆盖系统属性.

来源:关于sbt邮件列表的讨论


Mar*_*rco 5

感谢您的指点,这实际上帮助我解决了与 Scala 测试有些相关的问题。

sbt 事实证明,当存在子项目(请参阅我的 代码)并且某些测试无法获取系统属性时,确实会分叉测试。

因此sbt -Dsomething="some value" test,在 中,当无法在系统属性中找到时,某些测试将会失败something(这恰好是我的 DB URI,所以这很重要!)

这让我抓狂,所以我想我应该将其发布在这里以供其他人将来参考(正如 @akauppi 正确指出的那样,几周后“其他人”很可能就是我!)。

修复方法是将以下内容添加到build.st

fork in Test := false