【问题标题】:Ensure 're-start' task automatically runs before it:test确保“重新启动”任务在它之前自动运行:测试
【发布时间】:2014-01-23 12:19:46
【问题描述】:

在我运行 IntegrationTest 目标 (it:test) 之前,是否可以让 re-start(又名 reStart)任务自动运行?

我认为这样做可以:

test <<= (test in IntegrationTest) dependsOn reStart

但是,我收到了这个错误:

build.sbt:54: error: not found: value reStart
test <<= (test in IntegrationTest) dependsOn reStart
                                             ^
[error] Type error in expression

通过添加import Revolver._,我得到了一些进一步的信息,但它仍然失败。但是,现在我得到了一个更具描述性的错误:

build.sbt:55: error: type mismatch;
 found   : sbt.InputKey[spray.revolver.AppProcess]
 required: sbt.Scoped.AnyInitTask
    (which expands to)  sbt.Def.Initialize[sbt.Task[T]] forSome { type T }
test in IntegrationTest <<= (test in IntegrationTest) dependsOn reStart

有没有办法解决这个问题?

【问题讨论】:

  • 你导入了spray.revolver.RevolverPlugin.Revolver.reStart吗?
  • 我试过了,但没用。不过,它帮助我更进一步……更新了问题以反映。

标签: scala sbt


【解决方案1】:

您可以像这样定义特殊的TaskKey-typed 任务 (working example):

lazy val reStart0 = TaskKey[AppProcess]("re-start-0")
lazy val emptyArgs = SettingKey[revolver.Actions.ExtraCmdLineOptions]("empty-args")

lazy val projectA = Project(
  id = "hello-a",
  base = file("./a"),
  settings = Project.defaultSettings ++ Revolver.settings
).settings(
  emptyArgs := revolver.Actions.ExtraCmdLineOptions(Nil, Nil),
  reStart0 <<= {
  (streams, Revolver.reLogTag, thisProjectRef, Revolver.reForkOptions, mainClass in Revolver.reStart, fullClasspath in Runtime, Revolver.reStartArgs, emptyArgs)
     .map(revolver.Actions.restartApp)
     .dependsOn(products in Compile)
  }
)

lazy val projectB = Project(
  id = "hello-b",
  base = file("./b"),
  settings = Project.defaultSettings ++ Revolver.settings ++ Defaults.itSettings)
.configs(IntegrationTest)
.settings(
  test in (IntegrationTest) <<= (test in IntegrationTest).dependsOn(reStart0 in projectA)
)

【讨论】:

  • 这看起来很有希望。有没有办法从 build.sbt 做到这一点?我不喜欢在绝对必要的情况下使用 Build.scala。
  • 好的。你能举一个更完整的例子来说明“...”之后的位在哪里吗?我似乎无法弄清楚。
  • This answer 说“dependsOn 不适用于测序”。所以这可能不是正确的方法。
  • 我正在尝试使用您的答案,但无法正常工作。我应该为“yourProject”、“...”、“streams”使用什么?
  • 我得到“值测试不是 Seq 的成员 [使用 sbt.TestOption 可序列化的产品]”
猜你喜欢
  • 2018-02-22
  • 2018-01-14
  • 2011-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-09
  • 2015-10-04
  • 1970-01-01
相关资源
最近更新 更多