2011-11-11 20 views
8

I miei progetti usano ancora sbt 0.7.7 e trovo molto comodo avere classi di utilità che posso eseguire dal prompt sbt. Posso anche combinare questo con proprietà che vengono mantenute separatamente, in genere per valori relativi all'ambiente che cambiano da host a host. Questo è un esempio della mia definizione del progetto sotto la directory project/build:sbt 0.11 eseguire gli esempi di attività necessari

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]" 
    } 
} 

posso utilizzare il mio compito come my-task option1 option2 sotto il guscio sbt.

Ho letto il nuovo sbt 0,11 documentazione presso https://github.com/harrah/xsbt/wiki comprese le sezioni su Tasks e TaskInputs e francamente sto ancora lottando su come realizzare quello che ho fatto su 0.7.7.

Sembra che le proprietà aggiuntive potrebbero semplicemente essere sostituite da un numero environment.sbt separato, che le attività devono essere definite in project/build.scala prima di essere impostate in build.sbt. Sembra anche che ci sia il supporto al completamento, che sembra molto interessante.

Oltre questo sono un po 'sopraffatto. Come realizzo ciò che ho fatto con il nuovo sbt?

+0

mi piacerebbe aiutare, ma non ricordo i dettagli relativi sbt 0.7.7. Mi chiedo se questa domanda possa essere suddivisa in più domande autonome su sbt 0.11? –

+0

@KiptonBarros, certo - iniziamo con il 'runTask' di base a cui posso fornire argomenti sulla shell sbt. – huynhjl

+0

Sembra che la documentazione di sbt sia attualmente in fase di revisione. Penso che la sezione "Definizione attività di input di base" nella pagina wiki [Input Tasks] (https://github.com/harrah/xsbt/wiki/Input-Tasks) sia ciò che stai cercando. –

risposta

3

È possibile definire un compito come questo:

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

E la tua impostazione:

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

È possibile anche definire una nuova configurazione come:

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

aggiungere questo config a il tuo progetto e usalo per impostare le impostazioni per questa configurazione:

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) 

poi lanciare il vostro compito con extra-oggetti di scena: il mio compito-

Problemi correlati