使用自定义任务调用子项目的main

时间:2015-10-22 21:27:09

标签: sbt

我有一个项目为一堆项目执行集成测试,这些项目都捆绑在同一个多项目构建中。集成测试通过常规主(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中的publishlocalintegrationTest := (run in Compile in projIntegrationTest).value,我的自定义任务行按预期运行,并在自定义任务完成时负责编译或发布执行。

1 个答案:

答案 0 :(得分:6)

它不起作用,因为runInputTask,而不是常规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让这个通过,使得很难排除故障。 (但请注意,弃用消息提示的解决方案与我在此处使用的解决方案不同;我还没有调查过这种差异。有人可以对此有所了解吗?)