2011-11-11 8 views
8

Mis proyectos todavía están utilizando sbt 0.7.7 y me parece muy conveniente tener clases de utilidad que pueda ejecutar desde el indicador sbt. También puedo combinar esto con propiedades que se mantienen por separado, generalmente para valores relacionados con el entorno que cambian de hosts a hosts. Este es un ejemplo de mi definición del proyecto en el directorio project/build:sbt 0.11 ejecutar ejemplos de tareas necesarios

class MyProject(info: ProjectInfo) extends DefaultProject(info) { 
    //... 
    lazy val extraProps = new BasicEnvironment { 
    // use the project's Logger for any properties-related logging 
    def log = MyProject.this.log 
    def envBackingPath = path("paths.properties") 
    // define some properties that will go in paths.properties 
    lazy val inputFile = property[String] 
    } 

    lazy val myTask = task { args => 
    runTask(Some("foo.bar.MyTask"), 
     runClasspath, extraProps.inputFile.value :: args.toList).dependsOn(compile) 
     describedAs "my-task [options]" 
    } 
} 

entonces puedo usar mi tarea como my-task option1 option2 debajo de la cáscara SBT.

He leído la nueva documentación SBT 0,11 a https://github.com/harrah/xsbt/wiki incluyendo las secciones sobre Tasks y TaskInputs y francamente Todavía estoy luchando sobre cómo lograr lo que hice en 0.7.7.

Parece que las propiedades adicionales podrían simplemente reemplazarse por un environment.sbt por separado, que las tareas deben definirse en project/build.scala antes de establecerse en build.sbt. También parece que hay soporte de finalización, que se ve muy interesante.

Más allá de eso estoy algo abrumado. ¿Cómo logro lo que hice con el nuevo sbt?

+0

Me gustaría ayudar, pero no recuerdo los detalles sobre SBT 0.7.7. Me pregunto si esta pregunta podría dividirse en múltiples preguntas autocontenidas sobre sbt 0.11. –

+0

@KiptonBarros, claro, comencemos con 'runTask' básico al que puedo proporcionar argumentos en el shell sbt. – huynhjl

+0

Parece que la documentación de sbt está siendo revisada actualmente. Creo que la sección "Definición de tarea de entrada básica" en la página wiki [Tareas de entrada] (https://github.com/harrah/xsbt/wiki/Input-Tasks) es lo que estás buscando. –

Respuesta

3

Se puede definir una tarea como esta:

val myTask = InputKey[Unit]("my-task") 

y su entorno:

val inputFile = SettingKey[String]("input-file", "input file description") 

También puede definir una nueva configuración como:

lazy val ExtraProps = config("extra-props") extend(Compile) 

agregar esta configuración para su proyecto y úselo para establecer la configuración para esta configuración:

lazy val root = Project("root", file(".")).config(ExtraProps).settings(
    inputFile in ExtraProps := ... 
    ... 
    myTask in ExtraPops <<= inputTask { (argTask:TaskKey[Seq[String]]) => 
    (argTask, inputFile) map { (args:Seq[String], iFile[String]) => 
     ... 
    } 
    } 
).dependsOn(compile) 

a continuación, iniciar su tarea con extra-puntales: mi-tarea

Cuestiones relacionadas