我确定我遗漏了一些非常简单的东西......我想为我的sbt项目设置系统属性java.awt.headless
为true
。阅读page on properties我认为我需要使用system
或systemOptional
。在我的项目文件中,我尝试过这样的事情:
lazy val javaAwtHeadless = system[Boolean]("java.awt.headless")
将其设置为用户属性(例如lazy val javaAwtHeadless = property[Boolean]
)并在build.properties
中设置附带值使得该属性在sbt控制台中可见,但不在sbt的Scala控制台中(通过System.getProperty("java.awt.headless")
)
set java.awt.headless true
可以正常工作,包括在Scala控制台中设置,但是下次启动sbt时它不会持续存在。
答案 0 :(得分:10)
一种简单的方法是编辑用于运行sbt
并添加-Dprop=val
答案 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设置(如密码)时,以下工作确实有效。
很丑,但提供默认设置,并可选择从 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