【问题标题】:How do I set a system property for my project in sbt?如何在 sbt 中为我的项目设置系统属性?
【发布时间】:2011-03-08 19:22:24
【问题描述】:

我确定我错过了一些非常简单的东西...我想为我的 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"))。

来自 sbt 控制台的set java.awt.headless true 有效,包括在 Scala 控制台中设置,但它不会持续到我下次启动 sbt。

【问题讨论】:

    标签: scala project sbt system-properties


    【解决方案1】:

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

    【讨论】:

    • 是的,但这需要我在我开发的所有机器上更改我的 sbt 启动命令,而且会影响我使用 sbt 开发的其他项目。
    • 我亲自将 sbt 启动器和 sbt shell 脚本检查到每个项目中,例如:github.com/scalaz/scalaz。您是否刚刚在项目定义中的某处尝试过System.setProperty("prop", "val")?请记住,默认情况下 SBT 在同一进程中运行所有内容,除非您明确要求分叉:code.google.com/p/simple-build-tool/wiki/Forking
    • 或者在trunk中,system.props("prop") = "val"。啊,这样更好。
    • 您可以通过 shell 中的插件来做到这一点。我写了github.com/mustaghattack/jvm-command 就可以了。
    • 或者,免费插件,只需sbt> eval System.setProperty("foo", "bar")
    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

      如果您尝试设置 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")
      

      从命令行

      现在只需像使用 Maven 或其他 JVM 程序一样通过 -Dprop=value 覆盖。 Note props 出现在 SBT 任务之前。

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

      【讨论】:

      • "笔记道具出现在 SBT 任务之前。"太好了,这是我的问题
      猜你喜欢
      • 1970-01-01
      • 2015-07-03
      • 1970-01-01
      • 2011-07-08
      • 2011-11-03
      • 2013-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多