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

Posted

技术标签:

【中文标题】在 sbt-native-packager 中配置“动态”命令行参数【英文标题】:Configure "dynamic" command line arguments in sbt-native-packager 【发布时间】:2018-10-01 07:34:01 【问题描述】:

我正在尝试将命令行参数附加到由 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】:

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

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

【讨论】:

以上是关于在 sbt-native-packager 中配置“动态”命令行参数的主要内容,如果未能解决你的问题,请参考以下文章

如何在运行时为使用 sbt-native-packager 捆绑的应用程序加载配置文件

sbt-native-packager scala 播放 dockerfile 未使用默认配置运行

sbt-native-packager 插件在 Play 项目的 rpm 构建中出错

如何使用 sbt-native-packager 设置 docker 镜像名称

Scala SBT - sbt-native-packager,如何指定自定义阶段目录

SBT 使用 sbt-native-packager 如何创建不同的构建文件?