在sbt中定义自定义测试配置

Joh*_*han 5 scala sbt

我需要在sbt中定义一个运行test的自定义测试配置,但需要一些额外的设置.我一直在四处寻找如何做到这一点,但我似乎无法做到这一点.

我想做的是这样的:> test它将运行正常的测试任务,> pipelinetest并且与测试完全相同,只有(javaOptions += "-Dpipeline.run=run".

我已经弄清楚如何设置javaOptions进行测试,如下所示: javaOptions in test += "-Dpipeline.run=run"所以我希望能够做到的是:javaOptions in pipelinetest += "-Dpipeline.run=run"

我将如何定义pipelinetest以实现这一目标?这需要成为一项新任务吗?或者这是一个设置test.我现在很擅长这一点并且对此非常困惑,阅读文档并没有帮助,所以任何帮助都会非常感激.

Imr*_*hid 2

我只有部分答案,但我认为这可能是有用的信息。我只是想对 Spark 中的 sbt 构建做一些类似的事情——我想要一种使用调试器运行测试的方法。马克·哈拉的评论为我指明了正确的方向。我所做的改变

lazy val TestDebug = config("testDebug") extend(Test)
...
baseProject
  .configs(TestDebug)
  .settings(inConfig(TestDebug)(Defaults.testTasks): _*)
  .settings(Seq(
    javaOptions in TestDebug ++= "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005"
    .split(" ").toSeq))
Run Code Online (Sandbox Code Playgroud)

这使得我通常调用testtestOnly等不再需要,但现在我也可以运行testDebug:testOnly ...,它将使用上面定义的额外选项。(它可能还使用testDebug:test这些额外的选项创建了 等,这些选项没有用,但是哦,好吧。)

我不太明白为什么,但对我来说,让它发挥作用的一个重要部分是使用inConfig(TestDebug)(Defaults.testTasks), 而不是inConfig(TestDebug)(Defaults.testSettings).

就我而言,我在弄清楚如何 (a) 使其适用于多项目构建以及 (b) 我们的构建更加奇怪 b/c 它基于 POM 文件时遇到了麻烦,这使得项目定义不同比每个例子。

像往常一样,我对 sbt 的问题是我找到了似乎相关的信息,但我的构建有一些不寻常的方面,这使我无法完全对答案进行货物崇拜;虽然看起来我需要进行一些琐碎的修改,但如果没有彻底理解,很难修改示例。