2014-10-16 11 views
6

Mam plik build.scala który posiada zależność, który wygląda tak:Jak używać zmiennych -D w pliku build.scala za pomocą SBT?

"com.example" % "core" % "2.0" classifier "full-unstable" 

ten ciągnie w słoiku z klasyfikatora z pełnym niestabilny

Co muszę zrobić, to podać albo " unstable "lub" stable "do SBT (przy użyciu -DI) z Jenkins (serwer kompilacji), aby zmienić klasyfikator. Jeśli zmienna podstawienie pracował tak jak to robi w Maven, zależność będzie wyglądać następująco:

"com.example" % "core" % "2.0" classifier "full-${branch}" 

I chciałbym zrobić "-Dbranch = unstable" lub "-Dbranch = stable"

jestem bardzo jasne, w jaki sposób Robię to za pomocą SBT i pliku build.scala.

Odpowiedz

10

Można po prostu uzyskać dostęp do sys.props: "Dwukierunkowa, zmienna mapa reprezentująca bieżące właściwości systemu." Tak, można zrobić coś takiego:

val branch = "full-" + sys.props.getOrElse("branch", "unstable") 
"com.example" % "core" % "2.0" classifier branch 

Jeśli chcesz mieć bardziej zaawansowane właściwości niestandardowych z pliku w Build.scala:

import java.io.{BufferedReader, InputStreamReader, FileInputStream, File} 
import java.nio.charset.Charset 
import java.util.Properties 

object MyBuild extends Build { 

    // updates system props (mutable map of props) 
    loadSystemProperties("project/myproj.build.properties") 

    def loadSystemProperties(fileName: String): Unit = { 
    import scala.collection.JavaConverters._ 
    val file = new File(fileName) 
    if (file.exists()) { 
     println("Loading system properties from file `" + fileName + "`") 
     val in = new InputStreamReader(new FileInputStream(file), "UTF-8") 
     val props = new Properties 
     props.load(in) 
     in.close() 
     sys.props ++ props.asScala 
    } 
    } 

    // to test try: 
    println(sys.props.getOrElse("branch", "unstable")) 
} 

SBT jest mocniejszy niż Maven, ponieważ można po prostu napisać Kod Scala, jeśli potrzebujesz czegoś bardzo niestandardowego. W takim przypadku należy użyć wartości Build.scala zamiast build.sbt.

p.s myproj.build.properties plik wygląda to na przykład:

sbt.version=0.13.1 

scalaVersion=2.10.4 

parallelExecution=true 

branch=stable 
+0

nie SBT już czytać w build.properties po wyjęciu z pudełka, że ​​trzeba to zrobić ręcznie? lub pamiętam źle. –

+0

tak to robi. Pokazałem przykład dodatkowego pliku 'build.properties', który mógłbyś mieć dla Jenkinsa, który również może być automatycznie generowany przez krok pre-build Jenkinsa. Zmieniam nazwę pliku w tym przykładzie, aby uniknąć nieporozumień. –

Powiązane problemy