How do I consume -D variables in build.scala using SBT?

故事扮演 提交于 2019-12-22 06:26:47

问题


I have a build.scala file that has a dependency that looks like this:

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

This pulls in a JAR with the classifier of full-unstable

What I need to do is specify either "unstable" or "stable" to SBT (using a -D I presume) from Jenkins (the build server) to change the classifier. If variable substitution worked like it does in Maven, the dependency would look like:

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

And I would do "-Dbranch=unstable" or "-Dbranch=stable"

I'm very unclear how I do this with SBT and a build.scala file.


回答1:


You can simply access sys.props: "A bidirectional, mutable Map representing the current system Properties." So, you can do something like this:

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

If you want to have more advanced custom properties from file in your 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 is more powerful than Maven because you can simply write Scala code if you need something very custom. You would want to use Build.scala instead of build.sbt in such case.

p.s myproj.build.properties file looks like this for example:

sbt.version=0.13.1

scalaVersion=2.10.4

parallelExecution=true

branch=stable


来源:https://stackoverflow.com/questions/26394237/how-do-i-consume-d-variables-in-build-scala-using-sbt

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!