代码之家  ›  专栏  ›  技术社区  ›  Toby Daniel C. Sobral

在sbt native packager中配置“动态”命令行参数

  •  2
  • Toby Daniel C. Sobral  · 技术社区  · 6 年前

    我试图将命令行参数附加到sbt native packager生成的标准脚本中,但我不知道如何获得阅读文档后想要的行为。

    基本上,我想在我的 applicaiton.ini 文件

    -server
    -J-Xms256m
    -J-Xmx512m
    -Dcom.sun.management.jmxremote=true 
    -Dcom.sun.management.jmxremote.port=1616 
    -Dcom.sun.management.jmxremote.authenticate=false 
    -Dcom.sun.management.jmxremote.ssl=false 
    -Djava.rmi.server.hostname=$(getIpAddress) 
    

    目前一切正常,但您可能已经注意到 $(getIpAddress) 。我希望从将在主机上运行的函数中在此处指定一个值。

    我可以添加函数 getIpAddress 到脚本模板,使用:

    bashScriptExtraDefines ++= 
       IO.readLines(sourceDirectory.value / "scripts" / "find_ip.sh")
    

    因此,将内容附加到runner脚本中,如下所示:

    getIpAddress() {
        echo 10.0.1.23 .  # impl snipped for brevity
    }
    
    # java_cmd is overrode in process_args when -java-home is used
    declare java_cmd=$(get_java_cmd)
    
    # if configuration files exist, prepend their contents to $@ so it can be processed by this runner
    [[ -f "$script_conf_file" ]] && set -- $(loadConfigFile "$script_conf_file") "$@"
    
    run "$@"
    

    这个 set -- $(loadConfigFile "$script_conf_file") "$@" bit正在用我的 application.ini 但它不会评估功能。

    因此,我得到了java命令的前置内容 -- 但是我 不知道我能不能让它评估一下 $(getIpAddress) 。当我执行脚本时,输出如下所示,表明它没有调用函数。我需要这里的解析值。

    $ ./my-app -v
    # Executing command line:
    /Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/bin/java
    -Xms256m
    -Xmx512m
    -Dcom.sun.management.jmxremote=true
    -Dcom.sun.management.jmxremote.port=1616
    -Dcom.sun.management.jmxremote.authenticate=false
    -Dcom.sun.management.jmxremote.ssl=false
    -Djava.rmi.server.hostname=$(getIpAddress)
    -cp
    /Users/toby/my-app.jar
    my.app.Main
    -serve
    

    是否有其他方法可以实现同样的效果——向生成的脚本添加更多“动态”值?我的bash命令是否有误?:'(

    1 回复  |  直到 6 年前
        1
  •  3
  •   dwickern    6 年前

    INI文件中的参数无法展开。您可以将其添加到脚本中:

    bashScriptExtraDefines += """addJava "-Djava.rmi.server.hostname=$(getIpAddress)""""