【问题标题】:Setting system properties with "sbt run"使用“sbt run”设置系统属性
【发布时间】:2022-02-02 06:06:32
【问题描述】:

我正在使用一个相当新的 SBT 版本(似乎很难弄清楚这个版本是什么)。我想使用sbt run 将系统属性传递给我的应用程序,如下所示:

sbt -Dmyprop=x run

我该怎么做?

【问题讨论】:

    标签: sbt


    【解决方案1】:

    SBT 的运行程序通常不会创建新进程,因此如果您想设置传递的参数,您还必须告诉它这样做。您可以在构建设置中添加如下内容:

    fork := true
    
    javaOptions := Seq("-Dmx=1024M")
    

    the SBT documentation 中有更多关于分叉进程的详细信息。

    【讨论】:

    【解决方案2】:

    我找到了将其添加到 build.sbt 的最佳方式:

    // important to use ~= so that any other initializations aren't dropped
    // the _ discards the meaningless () value previously assigned to 'initialize'
    initialize ~= { _ =>
      System.setProperty( "config.file", "debug.conf" )
    }
    

    相关:当这样做以更改加载的类型安全配置(我的用例)时,还需要手动包含默认配置。为此,Typesafe 配置建议的 include "application" 还不够,但 include classpath("application.conf") 有效。想提一下,因为其他一些人可能出于完全相同的原因想要覆盖系统属性。

    来源:sbt 邮件列表上的discussion

    【讨论】:

    • 事实证明,“其他人”是我自己,仅仅 8 天后。设法以某种方式丢失了“类路径()”部分。 StackOverflow 条目的原因 #1 是为了提醒我们自己......
    • 注意:由于某种原因,如果想在 build.sbt 的其他地方为“测试中”单独定义它,这将不再起作用。总而言之,'initialize' 的使用似乎充其量是半记录的,所以我将采用 Luke Taylor 建议的 'fork := true' 方法。
    • 很遗憾,因为我更喜欢你的方法。设置javaOptions后你还fork一个单独的JVM吗?
    • 我一直坚持使用 'fork := true' 方法
    • 我今天也试过了,它也对我有用:)。谢谢你回复我。
    【解决方案3】:

    感谢您的指点,这实际上帮助我解决了一个与 Scala 测试相关的问题。

    原来sbt确实在有子项目时分叉测试(请参阅我的code)并且某些测试无法获取系统属性。

    所以在sbt -Dsomething="some value" test 中,当在系统属性中找不到something 时,一些测试会失败(这恰好是我的数据库URI,所以这很重要!)

    这让我发疯了,所以我想我会把它贴在这里以供其他人将来参考(正如@akauppi 正确指出的那样,“其他人”很可能会在几周内成为我!)。

    解决方法是将以下内容添加到build.st

    fork in Test := false

    【讨论】:

      【解决方案4】:

      我认为最好是使用 JAVA_OPTS 环境变量:

      #update the java options (maybe to keep previous options)
      export JAVA_OPTS="${JAVA_OPTS} -Dmyprop=x"
      #now run without any extra option
      sbt run
      

      【讨论】:

        【解决方案5】:

        您可以在 sbt 命令的末尾传递系统属性:

        sbt run -Dmyprop=x
        

        如果您必须将程序参数传递到阶段,只需在引号后再次传递系统属性即可:

        sbt "runMain com.example.MyClass -p param-value" -Dmyprop=x
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-07-03
          • 2023-03-28
          • 2014-02-04
          • 2011-03-08
          • 1970-01-01
          • 2017-06-08
          • 2011-03-21
          • 1970-01-01
          相关资源
          最近更新 更多