配置"动态" sbt-native-packager中的命令行参数

时间:2018-04-20 14:33:59

标签: bash scala sbt jmx sbt-native-packager

我试图将命令行参数附加到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")

因此内容会像这样附加到跑步者脚本:

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") "$@"位在java命令前面加上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 个答案:

答案 0 :(得分:2)

INI文件中的参数不会扩展。您可以将其添加到脚本中:

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