我有一个项目为一堆项目执行集成测试,这些项目都捆绑在同一个多项目构建中.集成测试通过常规main(object Runner extends App)运行.
我希望能够通过命名的任务或命令从多项目构建的根项目运行它integrationTest,所以我尝试:
val integrationTest = taskKey[Unit]("Executes integration tests.")
lazy val root = (project in file(".")).aggregate(projIntegrationTest, projA, projB, ...).settings(
integrationTest := (run in Compile in projIntegrationTest).value
)
Run Code Online (Sandbox Code Playgroud)
当我integrationTest在提示上发出时,什么都不做,只发出:
[成功]总时间:0秒,2015年10月23日12:31:21 AM完成
我怎样才能找出为什么在我的自定义任务运行时它无法integrationTest运行?
奇怪的是,替换run为compile或publishlocal在integrationTest := (run in Compile in projIntegrationTest).value上面,我的自定义任务行按预期运行,并在执行自定义任务时负责编译或发布.
它不起作用,因为它run是一个InputTask,而不是一个常规的Task.
你需要这样做:
integrationTest :=
(run in Compile in projIntegrationTest)
.toTask("").value
Run Code Online (Sandbox Code Playgroud)
这将在http://www.scala-sbt.org/0.13/docs/Input-Tasks.html的 "从输入任务中获取任务"部分中介绍.
截至sbt 0.13.13,您的代码给出:
warning: `value` is deprecated for an input task. Use `evaluated` or `inputTaskValue`.
Run Code Online (Sandbox Code Playgroud)
这是一个很好的改进; 早期版本的sbt让这个通过,使得很难排除故障.(但请注意,弃用消息提示的解决方案与我在此处使用的解决方案不同;我没有调查过这种差异.有人可以对此有所了解吗?)