2012-06-28 34 views
5

我使用SBT 0.11。在sbt 0.11中獲取項目的源文件中的自定義任務

我有以下build.sbt文件中SBT項目:

myAction := { 
    // val srcFiles = ? 
    // How can I make srcFiles a List[File] of all sources files? 
    println("This is my action") 
} 

它工作正常,但我怎麼能訪問像所有的Java/Scala的源文件路徑,例如設置src/main/scala/*.scala,以及目標類目錄,例如目標/斯卡拉-2.9.1 /班?

回答

7

定義taskKey,說

yourActionTask

然後

yourActionTask <<= (baseDirectory, target, packageBin in Compile, resources in Compile...) map { (basedir, targetDir, bin, res...)=> 
    // use these resources to complete your task as per your needs 
} 

BTW。您可以在Keys.scala源代碼或sbt的scaladoc中找到更多預定義的任務/密鑰。

這裏是你可以參考這是從我的構建文件的一個提取的例子(只是結合TaskKey和任務定義在一起,因爲我不打擾,我會重用TaskKey在未來):

val distTask = TaskKey[Unit]("dist", "distribute the deployment package of eromanga") <<= (baseDirectory, target, fullClasspath in Compile, packageBin in Compile, resources in Compile, streams) map { 
(baseDir, targetDir, cp, jar, res, s) => 
    s.log.info("[dist] prepare distribution folders...") 
    val assemblyDir = targetDir/"dist" 
    val confDir = assemblyDir/"conf" 
    val libDir = assemblyDir/"lib" 
    val binDir = assemblyDir/"bin" 
    Array(assemblyDir, confDir, libDir, binDir).foreach(IO.createDirectory) 

    s.log.info("[dist] copy jar artifact to lib...") 
    IO.copyFile(jar, libDir/jar.name) 

    s.log.info("[dist] copy 3rd party dependencies to lib...") 
    cp.files.foreach(f => if (f.isFile) IO.copyFile(f, libDir/f.name)) 

    s.log.info("[dist] copy shell scripts to bin...") 
    ((baseDir/"bin") ** "*.sh").get.foreach(f => IO.copyFile(f, binDir/f.name)) 

    s.log.info("[dist] copy configuration templates to conf...") 
    ((baseDir/"conf") * "*.xml").get.foreach(f => IO.copyFile(f, confDir/f.name)) 

    s.log.info("[dist] copy examples chanenl deployment...") 
    IO.copyDirectory(baseDir/"examples", assemblyDir/"examples") 

    res.filter(_.name.startsWith("logback")).foreach(f => IO.copyFile(f, assemblyDir/f.name)) 
    } 
+0

謝謝!它像一個魅力。 :) –

+0

我不明白。哪一個參數是Scala資源的列表????? – pathikrit

相關問題