我有一个项目为一堆项目执行集成测试,这些项目都捆绑在同一个多项目构建中。集成测试通过常规主(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
)
当我在提示符上发出integrationTest
时,什么都不做,只发出:
[成功]总时间:0秒,2015年10月23日12:31:21完成
我如何找出在我的自定义任务integrationTest
运行时无法运行的原因?
奇怪的是,将run
替换为上面compile
中的publishlocal
或integrationTest := (run in Compile in projIntegrationTest).value
,我的自定义任务行按预期运行,并在自定义任务完成时负责编译或发布执行。
答案 0 :(得分:6)
它不起作用,因为run
是InputTask
,而不是常规Task
。
你需要这样做:
integrationTest :=
(run in Compile in projIntegrationTest)
.toTask("").value
这包含在"从输入任务中获取任务" CoVim的一部分。
从sbt 0.13.13开始,你的代码给出了:
warning: `value` is deprecated for an input task. Use `evaluated` or `inputTaskValue`.
这是一个很好的改进;早期版本的sbt让这个通过,使得很难排除故障。 (但请注意,弃用消息提示的解决方案与我在此处使用的解决方案不同;我还没有调查过这种差异。有人可以对此有所了解吗?)