2014-01-23 103 views
5

是否有可能在运行IntegrationTest目标(it:test)之前让re-start(又名重启)任务自动运行?确保'重新启动'任务自动运行之前:测试

我认为这将做到这一点:

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 

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

+0

你进口'spray.revolver.RevolverPlugin.Revolver.reStart'? – chemikadze

+0

我试过了,但没有奏效。它帮助我更进一步,虽然......更新了问题以反映。 –

回答

2

可以定义为这样的特殊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) 
) 
+0

这看起来很有前途。有没有办法从build.sbt做到这一点?我不喜欢使用Build.scala进行超过绝对必要的操作。 –

+0

不幸的是,我从来没有尝试过。 – chemikadze

+0

好的。你能举出一个更完整的例子,说明“......”之后的那个位置在哪里?我似乎无法弄清楚。 –

相关问题