2013-03-04 75 views

回答

5

這其實很簡單。首先,我檢查文檔,看看它是什麼(inspect doc在SBT提示),發現這是一個任務,並與上聲明build.sbt本身的依賴進行:

doc in Compile <<= doc in Compile map { (file) => 
    Seq("bash", "-c", "ls >tmp.log").! // CWD is sbt's current dir 
    file 
} 

我用來執行bash是什麼東西與scala.sys.process相同的庫,因此您可以查找Scaladoc for that。這是在SBT 0.12.2上測試的,我認爲在SBT 0.11.x或0.10.x上可能會有小的差異。

1

在SBT 0.13和使用的情況下也可以用:=.value宏取得的最新版本(即均旨在爲簡單得多<<=):

doc in Compile := { 
    val f = (doc in Compile).value 
    // execute a shell script if you want with sbt's Process API 
    // http://www.scala-sbt.org/0.13/docs/Process.html 
    val ec = (baseDirectory.value/"myBashScript.sh").getAbsolutePath ! 
    val log = streams.value.log 
    log.debug(s"Exit code: $ec") 
    f 
} 

你可能還喜歡爲任務triggeredBy方法如下:

lazy val runMyBashScriptTask = taskKey[Unit]("Run myBashScript") 

runMyBashScriptTask := { 
    val ec = (baseDirectory.value/"myBashScript.sh").getAbsolutePath ! 
    val log = streams.value.log 
    log.debug(s"Exit code: $ec") 
} 

runMyBashScriptTask <<= runMyBashScriptTask triggeredBy (doc in Compile) 

它假定myBashScript.sh是該項目的主目錄由baseDirectory設置爲指向。