2012-06-28 4 views
5

erhalten Ich benutze SBT 0.11.Die Quelldateien des Projekts in der benutzerdefinierten Aufgabe in sbt 0.11

Ich habe die folgende build.sbt Datei in einem sbt Projekt:

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

Es funktioniert gut, aber wie kann ich Einstellungen zugreifen wie alle Java/Scala Quelle Dateipfade, z.B. src/main/scala/*.scala, und das Zielklassenverzeichnis, z.B. Ziel/scala-2.9.1/Klasse?

Antwort

7

definieren eine taskKey, sagen

yourActionTask

dann

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. Sie können mehr vordefinierte Aufgaben/Schlüssel in Keys.scala-Quellcode oder scaladoc von sbt finden.

hier ist ein Beispiel, das Sie sich beziehen können, die von einem meiner Build-Datei extrahiert werden (nur zusammen TaskKey und Aufgabenstellung kombinieren, da ich mich nicht die Mühe mache die TaskKey in Zukunft wieder verwenden):

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

Danke! Es wirkt wie ein Zauber. :) –

+0

Ich verstehe es nicht. Welches der Argumente ist die Liste der Scala-Quellen ????? – pathikrit