使用“sbt run”设置系统属性

时间:2012-04-14 17:44:38

标签: sbt

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

sbt -Dmyprop=x run

我怎么能这样做?

4 个答案:

答案 0 :(得分:16)

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

fork := true

javaOptions := Seq("-Dmx=1024M")

the SBT documentation中有关分叉过程的更多细节。

答案 1 :(得分:9)

我找到了将其添加到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" )
}

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

来源:sbt邮件列表上的discussion

答案 2 :(得分:4)

感谢指针,这实际上帮助我解决了Scala Tests的一些相关问题。

事实证明,当有子项目时,sbt 分叉测试(请参阅我的code)并且某些测试无法获取系统属性

所以在sbt -Dsomething="some value" test中,如果在系统属性中找不到something,那么有些测试会失败(碰巧是我的数据库URI,所以它有点重要!)

这让我疯了,所以我想我会把它发布在这里供其他人参考(正如@akauppi正确指出的那样,很可能很高,“其他人”可能会在几周内成为我!)。

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

fork in Test := false

答案 3 :(得分:0)

我认为最好的方法是使用JAVA_OPTS环境变量:

#update the java options (maybe to keep previous options)
export JAVA_OPTS="${JAVA_OPTS} -Dmyprop=x"
#now run without any extra option
sbt run