2012-06-28 10 views
5

Uso SBT 0.11.Acquisizione dei file di origine del progetto nell'attività personalizzata in sbt 0.11

Sono il seguente build.sbt file in un progetto di SBT:

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

Funziona bene, ma come ho potuto accedere alle impostazioni come tutti i percorsi dei file sorgente Java/Scala, per esempio src/main/scala/*.scala e la directory della classe di destinazione, ad es. target/scala-2.9.1/classe?

risposta

7

definire un taskKey, diciamo

yourActionTask

poi

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 
} 

proposito. è possibile trovare più attività/tasti predefiniti nel codice sorgente di Keys.scala o in scaladoc di sbt.

qui è un esempio si può fare riferimento al quale è estratto da una delle mie build file (solo combinare TaskKey e Task definizione insieme, dal momento che non si preoccupano io riutilizzare il TaskKey in futuro):

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

Grazie! Esso funziona magicamente. :) –

+0

Non capisco. Quale degli argomenti è la lista delle fonti di Scala ????? – pathikrit

Problemi correlati