2012-06-28 11 views
5

Uso SBT 0.11.Obtención de los archivos fuente del proyecto en tareas personalizadas en sbt 0.11

He build.sbt el siguiente archivo en un proyecto SBT:

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

Funciona bien, pero ¿cómo podía acceder a la configuración como todas las rutas de los archivos fuente de Java/Scala, por ejemplo src/main/scala/*.scala, y el directorio de la clase de destino, p. target/scala-2.9.1/clase?

Respuesta

7

definir un taskKey, dicen

yourActionTask

continuación

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 
} 

cierto. puede encontrar tareas/claves más predefinidas en el código fuente de Keys.scala o scaladoc de sbt.

aquí es un ejemplo se puede hacer referencia a que se extrae de uno de mi fichero de construcción (justo combinar TaskKey y Tarea definición en conjunto, ya que no me molesta voy a volver a utilizar el TaskKey en el 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

Gracias! Funciona a las mil maravillas. :) –

+0

No lo entiendo. ¿Cuál de los argumentos es la lista de fuentes de Scala ????? – pathikrit

Cuestiones relacionadas