我对sbt
工具感到困惑。我想定义两个Java选项,一个用于sbt run
目标,另一个用于sbt test
目标。这些选项需要分配VM,我不希望其他命令(例如compile
,update
)。
如何在build.sbt
优雅地定义这个?
Compile
事物的作用是什么?那么Test
呢?fork
一次,以便它适用于sbt run
和sbt test
?我现在已经使用sbt
几年了。阅读文件。这样的事情仍然让我失望。 叹息
fork in run := true
javaOptions in (Compile,run) ++= Seq(
"-Dconfig.file=conf/debug.conf"
)
fork in test := true
javaOptions in (Test,test) ++= Seq(
"-Dconfig.file=conf/debug-test.conf"
)
使用sbt
0.13.8
答案 0 :(得分:2)
假设您要指定您只想在sbt run
上使用fork()而不是run
的其他执行(例如,在sbt test:run
上),那么您需要使用配置范围与任务一起。那就是:
fork in (Compile,run) := true
如果您有以下内容:
fork in run := true
它会分叉所有运行任务,包括test:run
等。
现在,如果你有这个:
fork := true
它将fork()所有范围内的所有可分叉任务。
回到你的问题,你可以把(编译,运行)和(测试,运行)等想象成(Configuration,task)
范围的实例。当您希望将特定设置的范围缩小到特定配置的任务时,应使用此构造:编译,运行,测试或您可能具有的任何自定义配置。
在.sbt
文件中,我认为正确的做法是:
fork in (Compile,run) := true
javaOptions in (Compile,run) ++= Seq(
"-Dconfig.file=conf/debug.conf"
)
fork in (Test,test) := true
javaOptions in (Test,test) ++= Seq(
"-Dconfig.file=conf/debug-test.conf"
)