考虑以下 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
...
请注意:run而不是compile:run。不知何故,“it”配置的重新定义似乎重新定义/屏蔽了运行任务。如果我选择“有趣”而不是“它”,则不会发生这种情况。我正在使用 sbt 0.13.15。
知道这里发生了什么以及如何防止运行任务被屏蔽吗?