在sbt插件掩码中覆盖集成测试配置运行任务

时间:2017-04-27 14:28:33

标签: sbt sbt-plugin

考虑以下sbt插件定义"覆盖"默认"它"配置以扩展测试配置(出于How to make "test" classes available in the "it" (integration test) configuration?讨论的原因)

import sbt._
import Keys._

object MyPlugin extends AutoPlugin {
  private lazy val IntegrationTest = config("it") extend(Test)

  override def projectSettings: Seq[Setting[_]] = Seq(
    ...
  ) ++ inConfig(IntegrationTest)(Defaults.itSettings)

  override def projectConfigurations: Seq[Configuration] = IntegrationTest :: Nil
}

虽然这看起来总体上起作用,但它会掩盖"运行任务。请参阅使用上述插件的项目的以下sbt输出:

[myproject] $ inspect run
[info] Input task: Unit
[info] Description:
[info]  Runs a main class, passing along arguments provided on the command 
line.
[info] Provided by:
[info]  {file://myproject/}myproject/it:run
[info] Defined at:
[info]  (sbt.Defaults) Defaults.scala:307
...

注意它:运行而不是编译:运行。某种程度上重新定义了"它" config似乎重新定义/掩盖运行任务。如果我选择例如,这不会发生"乐趣"而不是"它"。我使用的是sbt 0.13.15。

知道这里发生了什么,以及如何防止运行任务被屏蔽?

1 个答案:

答案 0 :(得分:0)

问题是缺少对sbt.plugins.JvmPlugin的插件依赖,它提供了编译/测试/运行/打包Java / Scala项目的机制(参见http://www.scala-sbt.org/0.13/docs/Using-Plugins.html)。

添加

override def requires: Plugins = plugins.JvmPlugin

似乎解决了这个问题。