我使用的是最新版本的SBT(似乎很难弄清楚版本是什么)。我想使用sbt run
将系统属性传递给我的应用程序,如下所示:
sbt -Dmyprop=x run
我怎么能这样做?
答案 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