使用“设置系统属性”;“sbt运行”;

使用“设置系统属性”;“sbt运行”;,sbt,Sbt,我使用的是SBT的最新版本(似乎很难确定该版本是什么)。我想通过sbt run将系统属性传递给我的应用程序,如下所示: sbt -Dmyprop=x run 我该怎么做呢?SBT的运行程序通常不会创建新的进程,因此如果要设置传递的参数,还必须告诉它这样做。您可以将以下内容添加到生成设置中: fork := true javaOptions := Seq("-Dmx=1024M") 中有关于分叉过程的更多详细信息。我发现最好的方法是将其添加到build.sbt: // important t

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

sbt -Dmyprop=x run

我该怎么做呢?

SBT的运行程序通常不会创建新的进程,因此如果要设置传递的参数,还必须告诉它这样做。您可以将以下内容添加到生成设置中:

fork := true

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

中有关于分叉过程的更多详细信息。

我发现最好的方法是将其添加到
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" )
}
相关:当执行此操作以更改加载的类型安全配置(我的用例)时,还需要手动包含默认配置。为此,类型安全配置建议的
include“application”
不够,但
include类路径(“application.conf”)
有效。我想提一下,因为其他一些人可能出于完全相同的原因想要覆盖系统属性


来源:在sbt邮件列表上,感谢您的指针,这实际上帮助我解决了与Scala测试相关的问题

事实证明,当存在子项目(请参见my)并且一些测试无法获取系统属性时,
sbt
确实会进行分叉测试

因此,在
sbt-Dsomething=“some value”测试中,如果在系统属性中找不到
某个东西,一些测试就会失败(这恰好是我的DB URI,所以有点重要!)

这让我发疯,所以我想我应该把它贴在这里,以备将来其他人参考(正如@akauppi正确指出的,在几周内,“其他人”很可能就是我!)

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


fork-in测试:=false

我认为最好使用JAVA\u 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

在命令行中如何使用run命令执行此操作?Chad将此作为一个单独的问题提出,但仅仅8天后,“其他人”就是我自己。设法丢失了“classpath()”部分。StackOverflow条目的原因#1是为了提醒我们自己……注意:出于某种原因,如果您想在build.sbt的其他地方单独为“in-Test”定义它,这将不再起作用。“initialize”的所有用法充其量只是半文档化的,所以我选择Luke Taylor建议的“fork:=true”方法。这太可惜了,因为我更喜欢你的方法。在设置了
javaOptions
之后,您是否仍然使用单独的JVM?我一直坚持使用“fork:=true”方法,我今天也尝试了这种方法,它对我也很有效:)。谢谢你回复我。