2014-10-21 1 views
0

При использовании генераторов коды с SBT, один использует конструкцию типаКак передать строку версии Scala в генератор кода для SBT?

def genFile(out: File): Seq[File] = { 
    val file = new File(out, "generated.scala") 
    // Add stuff to file 
    Seq(file) 
} 

(sourceGenerators in Compile) <+= (sourceManaged in Compile) map (genFile _) 

Если генератор нуждается в строке версии Scala, как вы передаете его в? Использование scalaVersion.value в genFile приводит к ошибке.

ответ

2

Это старый добрый путь. Я уверен, что существует более новый подход, в котором вы определяете genFile как настраиваемую задачу и включаете scalaVersion.value.

// build.sbt 
scalaVersion := "2.11.2" 

def genFile(out: File, v: String): Seq[File] = { 
    out.mkdirs() 
    val f = out/"generated.scala" 
    val w = new java.io.FileOutputStream(f) 
    w.write(s"""package object foo { 
      | val scalaVersion = "$v" 
      |} 
      |""".stripMargin.getBytes("UTF-8")) 
    w.close() 
    Seq(f) 
} 

(sourceGenerators in Compile) <+= 
    (sourceManaged in Compile, scalaVersion in Compile) map genFile 

$ sbt console 
... 
[info] Starting scala interpreter... 
[info] 
Welcome to Scala version 2.11.2 (OpenJDK 64-Bit Server VM, Java 1.7.0_65). 
Type in expressions to have them evaluated. 
Type :help for more information. 

scala> foo.scalaVersion 
res0: String = 2.11.2 
+0

* Вздох * ... спасибо. Глупый вопрос, поскольку я пробовал эту точную вещь и не понимал, что проблема не была фактически передана в версии, но я поставил ее в неправильном месте в списке аргументов '<+ =' (у меня уже было пять в реальном варианте использования). У меня нет туманной идеи, как я должен был знать, куда она должна идти. (Для справки: _third_ было классно. _sixth_ не было.) –

+0

(На самом деле это была «карта», которая была недовольна, а не '<+ ='.) –

Смежные вопросы