考虑以下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。
知道这里发生了什么,以及如何防止运行任务被屏蔽?
答案 0 :(得分:0)
问题是缺少对sbt.plugins.JvmPlugin
的插件依赖,它提供了编译/测试/运行/打包Java / Scala项目的机制(参见http://www.scala-sbt.org/0.13/docs/Using-Plugins.html)。
添加
override def requires: Plugins = plugins.JvmPlugin
似乎解决了这个问题。