如何根据设置运行不同的主要分类?

时间:2015-05-25 05:30:42

标签: scala sbt

在构建build.sbt文件时,请说我有两个主要对象:

object A {
    def main(args: Array[String]) = { println("I'm A!") }
}
object B {
    def main(args: Array[String]) = { println("I'm B!") }
}

我想在设置环境变量B时调用RUN_B,否则只运行默认值A。两个问题:

  • 我可以配置mainClass设置所依赖的设置和相应的路由吗?
  • 我可以从环境变量配置设置吗?

2 个答案:

答案 0 :(得分:1)

我使用以下代码做了类似的事情

lazy val stage = sys.props.getOrElse("stage", default = "dev")
lazy val selectedMain = stage match {
    case "dev" => Some("A")
    case _  => Some("B")
}

mainClass in (Compile, run) := selectedMain

你需要设置sbt -Dstage = production然后sbt run来踢主A或主B.

答案 1 :(得分:0)

您可以使用mainClass任务中的Scala代码直接读取环境变量。

mainClass in run := {
    Option(System.getenv("RUN_B")) match {
        case Some(_) => Some("com.myproject.main.B")
        case None  => Some("com.myproject.main.A")
    }
}

您可以检查设置以查看是否一切正常:

> show run::mainClass
[info] Some(com.myproject.main.A)