13

我确定我错过了一些非常简单的东西......我想为我的 sbt 项目设置系统java.awt.headless属性true。阅读关于我认为我需要使用或的属性的页面。在我的项目文件中,我尝试了以下操作:systemsystemOptional

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从 sbt 控制台工作,包括在 Scala 控制台中设置,但它不会持续到我下次启动 sbt。

4

3 回答 3

14

一种直接的方法是编辑用于运行sbt和添加的批处理文件或 shell 脚本-Dprop=val

于 2010-06-27T17:27:22.973 回答
8

如果我对所有 sbt 任务都需要这个选项,我会在 build.sbt 中设置如下

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

如果它只是用于一项任务,例如:运行,您可以限定:

javaOptions in Runtime += "-Djava.awt.headless=true" 
于 2014-04-24T09:05:11.320 回答
5

如果您尝试设置 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 程序一样覆盖 via。注意道具出现在 SBT 任务之前。

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

于 2016-06-02T16:31:57.353 回答