0

考虑以下 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。

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

4

1 回答 1

0

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

添加

override def requires: Plugins = plugins.JvmPlugin

似乎可以解决问题。

于 2017-05-04T11:15:56.040 回答