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

pr1*_*001 11 scala project system-properties sbt

我敢肯定,我的思念很简单的东西......我想设置系统属性java.awt.headlesstrue为我的SBT项目.阅读关于属性页面我认为我需要使用systemsystemOptional.在我的项目文件中,我尝试过以下内容:

lazy val javaAwtHeadless = system[Boolean]("java.awt.headless")
Run Code Online (Sandbox Code Playgroud)

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

set java.awt.headless true 从sbt控制台工作,包括在Scala控制台中设置,但它不会持续到下次我启动sbt.

ret*_*nym 11

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

  • 是的,但这需要我在我开发的所有机器上更改我的 sbt 启动命令,而且会影响我使用 sbt 开发的其他项目。 (3认同)

jaz*_*mit 6

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

javaOptions += "-Djava.awt.headless=true" 
Run Code Online (Sandbox Code Playgroud)

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

javaOptions in Runtime += "-Djava.awt.headless=true" 
Run Code Online (Sandbox Code Playgroud)

  • 这只适用于fork:= true (6认同)

Jos*_*ust 6

如果您尝试设置 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")
Run Code Online (Sandbox Code Playgroud)

从命令行

-Dprop=value现在只需像使用 Maven 或其他 JVM 程序一样重写 via 即可。注意 props 出现在 SBT 任务之前。

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