如何在sbt中为我的项目设置系统属性?

时间:2010-06-27 09:50:37

标签: scala project sbt system-properties

我确定我遗漏了一些非常简单的东西......我想为我的sbt项目设置系统属性java.awt.headlesstrue。阅读page on properties我认为我需要使用systemsystemOptional。在我的项目文件中,我尝试过这样的事情:

lazy val javaAwtHeadless = system[Boolean]("java.awt.headless")

将其设置为用户属性(例如lazy val javaAwtHeadless = property[Boolean])并在build.properties中设置附带值使得该属性在sbt控制台中可见,但不在sbt的Scala控制台中(通过System.getProperty("java.awt.headless")

来自sbt控制台的

set java.awt.headless true可以正常工作,包括在Scala控制台中设置,但是下次启动sbt时它不会持续存在。

3 个答案:

答案 0 :(得分:10)

一种简单的方法是编辑用于运行sbt并添加-Dprop=val

的批处理文件或shell脚本

答案 1 :(得分:6)

如果我需要所有sbt任务的此选项,我在build.sbt中将其设置如下

javaOptions += "-Djava.awt.headless=true" 

如果它仅适用于一项任务,例如:run,则可以使用以下范围:

javaOptions in Runtime += "-Djava.awt.headless=true" 

答案 2 :(得分:1)

如果您尝试设置SBT属性,例如插件设置,那么以下内容适用于0.13+。然而,当我们尝试从CI框架传递Liquibase设置(如密码)时,以下工作确实有效。

在你的build.sbt

很丑,但提供默认设置,并可选择从 System.properties 获取。通过这种方式,您可以覆盖默认和覆盖案例。

def sysPropOrDefault(propName:String,default:String):String = Option(System.getProperty(propName)).getOrElse(default)

liquibaseUsername := sysPropOrDefault("liquibase.username","change_me")
liquibasePassword := sysPropOrDefault("liquibase.password","chuck(\)orris")

从命令行

现在只需通过-Dprop=value覆盖,就像使用Maven或其他JVM程序一样。注意道具出现在SBT任务之前。

sbt -Dliquibase.password="shh" -Dliquibase.username="bob" liquibase:liquibase-update