2014-01-23 58 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

好的。你能舉出一個更完整的例子,說明「......」之後的那個位置在哪裏?我似乎無法弄清楚。 –

相關問題