【问题标题】:How to limit changes to `sbt run` and `sbt test` tasks?如何限制对 `sbt run` 和 `sbt test` 任务的更改?
【发布时间】:2015-07-14 01:35:14
【问题描述】:

我对@9​​87654321@ 工具感到困惑。我想定义两个 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

【问题讨论】:

  • 您在进行多项目项目吗?如果是,那么您在上面定义的设置将只为“根”项目定义,而不是为任何子项目定义。
  • 不,这是一个基于 build.sbt 的单一项目。我认为我的困惑是关于 (Compile, run) 类型的语法 - sbt 允许使用的各种“轴”。不过,这种需求本身就消失了,出于不相关的原因,我需要完全避免在 test 中分叉,现在我从启动 sbt 的外部构建系统中覆盖 config.file
  • 让我试着给出一个答案。我很想听听你的cmets。谢谢!

标签: sbt


【解决方案1】:

假设您想指定您只想在 sbt run 上执行 fork() 而不是在 run 的其他执行上(例如,在 sbt test:run 上),那么您需要将配置范围与任务一起使用。那就是:

fork in (Compile,run) := true

如果您有以下情况:

fork in run := true

它将fork所有运行任务,包括test:run等。

现在,如果你有这个:

fork := true

它将 fork() 所有范围内的所有可分叉任务。


回到您的问题,您可以将 (Compile, run) 和 (Test, run) 等视为(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"
)

【讨论】:

  • 感谢您的澄清,@marios 是否有任何情况可以使用(Compile,test)(Test,run)?我什么都看不到。
  • (Test,run) 如果您的 test 子文件夹中有可运行的类,那么这将是有意义的。可能在某些情况下这很有用......现在关于(Compile,test),当我在SBT 交互上执行show compile:test 时,它会显示“没有这样的设置/任务”。由于这个特定的任务似乎没有用,也许没有实现?如果我不得不推测,也许如果您在正常的src 文件夹中有测试代码,那么这可以执行这些测试。也许...
猜你喜欢
  • 2018-08-18
  • 1970-01-01
  • 2012-03-29
  • 1970-01-01
  • 2017-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多