请考虑以下SBT插件定义"覆盖"默认的" it"配置以扩展测试配置(出于在"如何使"测试"类" IT"(集成测试(配置"中可用的"测试"类别的原因?(
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
...
Note IT:RUN 而不是编译:Run 。以某种方式重新定义"它"config似乎可以重新定义/掩码 run 任务。如果我选择例如"有趣"而不是"它"。我正在使用SBT 0.13.15。
知道这里发生了什么以及如何防止运行任务被掩盖?
问题是对sbt.plugins.JvmPlugin
的缺少插件依赖性,该插件提供了编译/test/test/run/package java/scala项目的机制(请参阅http://www.scala-sbt.org/0.13/doc/used-plugins.html(。
添加
override def requires: Plugins = plugins.JvmPlugin
似乎解决了问题。