Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何在sbt中为项目设置系统属性?_Scala_Project_Sbt_System Properties - Fatal编程技术网

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

Scala 如何在sbt中为项目设置系统属性?,scala,project,sbt,system-properties,Scala,Project,Sbt,System Properties,我肯定我错过了一些非常简单的事情。。。我想为我的sbt项目将系统属性java.awt.headless设置为true。阅读时,我认为我需要使用系统或系统可选。在我的项目文件中,我尝试了以下方法: lazy val javaAwtHeadless = system[Boolean]("java.awt.headless") 将其设置为用户属性(例如,lazy val javaAwtHeadless=property[Boolean])并在build.properties中设置相应的值,使该属性在

我肯定我错过了一些非常简单的事情。。。我想为我的sbt项目将系统属性
java.awt.headless
设置为
true
。阅读时,我认为我需要使用
系统
系统可选
。在我的项目文件中,我尝试了以下方法:

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


从sbt控制台设置java.awt.headless true
有效,包括在Scala控制台中设置,但是它不会持续到下次启动sbt时。

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

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

javaOptions += "-Djava.awt.headless=true" 
如果仅针对一个任务,例如:运行,则可以确定以下范围:

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

如果您试图设置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

是的,但这需要我在我开发的所有机器上更改我的sbt启动命令,并且会影响我使用sbt开发的其他项目。我个人将sbt启动程序和sbt shell脚本检查到每个项目中,例如:。您是否在项目定义中的某个地方尝试过
System.setProperty(“prop”、“val”)
?请记住,默认情况下,SBT在同一进程中运行所有内容,除非您明确要求fork:或在trunk中,system.props(“prop”)=“val”。啊啊哈,那更好。你可以通过shell中的插件来实现。我写的就是这样。或者,没有插件,只是
sbt>eval System.setProperty(“foo”,“bar”)
“注意,在sbt任务之前会出现道具。”好消息,这是我的问题