6

我需要在 sbt 中定义一个运行测试的自定义测试配置,但需要一些额外的设置。我一直在环顾四周,试图弄清楚如何做到这一点,但我似乎无法做到这一点。

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

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

我将如何定义pipelinetest来实现这个目标?这需要成为一项新任务吗?或者这会是test. 我对 sbt 很陌生,目前对此感到非常困惑,阅读文档并没有帮助,因此将不胜感激。

4

1 回答 1

1

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

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))

这让我通常只调用test,testOnly等,但现在我也可以运行testDebug:testOnly ...,这将使用上面定义的额外选项。(它可能还testDebug:test使用那些没有用的额外选项创建了 , 等等,但是很好。)

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

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

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

于 2017-03-03T15:51:01.963 回答