如何限制对`sbt run`和`sbt test`任务的更改?

时间:2015-07-10 13:18:35

标签: sbt

我对sbt工具感到困惑。我想定义两个Java选项,一个用于sbt run目标,另一个用于sbt test目标。这些选项需要分配VM,我不希望其他命令(例如compileupdate)。

如何在build.sbt优雅地定义这个?

  • Compile事物的作用是什么?那么Test呢?
  • 如何仅声明fork一次,以便它适用于sbt runsbt 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

1 个答案:

答案 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"
)