为使用 sbt-native-packager 创建的可执行文件设置 JVM 选项的推荐方法是啥?
Posted
技术标签:
【中文标题】为使用 sbt-native-packager 创建的可执行文件设置 JVM 选项的推荐方法是啥?【英文标题】:What is the recommended way to set JVM options for the executables created with sbt-native-packager?为使用 sbt-native-packager 创建的可执行文件设置 JVM 选项的推荐方法是什么? 【发布时间】:2015-11-14 04:07:16 【问题描述】:目前,我在命令行上使用export JAVA_OPTS ...
,但似乎还有其他可能性,使用build.sbt
或外部属性文件。
我发现了几个相关的 github 问题 here、here 和 here,但许多选项令人困惑。有推荐的方法吗?
【问题讨论】:
【参考方案1】:您设置 JVM 选项的方法主要取决于您的用例:
每次都注入选项
如果您希望能够在每次运行服务时指定选项,则两种机制是环境变量和命令行参数。您使用哪个主要是出于品味或方便的问题(但命令行参数将覆盖环境变量设置)。
环境变量
您可以使用JAVA_OPTS
环境变量注入值。这被指定为直接传递给 java 二进制文件的一系列参数,每个参数用空格分隔。
命令行参数
您可以通过添加两种格式的命令行参数来注入值:
-Dkey=val
将 Java 环境属性传递到 java 二进制文件中。
-J-X
将任何标志 -X
传递给 java 二进制文件,剥离前导 -J
。
从可修改的文件中注入选项
如果您想在文件系统上获得一个可以在安装后修改的文件,您将需要使用sbt-native-packager
从.ini
文件中读取的能力来初始化 Java 选项的默认值.这个细节可以看http://www.scala-sbt.org/sbt-native-packager/archetypes/cheatsheet.html#file-application-ini-or-etc-default
按照说明进行操作,根据您使用的原型,您最终会得到一个位于 /etc/default
、application.ini
或其他自定义名称的文件,启动脚本将读取该文件以添加设置。
该文件的每一行都被视为额外的启动参数,因此仍然执行前面提到的相同规则;例如-X
标志需要像 -J-X
一样编写。
注入永远不需要更改的选项和代码
您可以使用 SBT 设置 bashScriptExtraDefines
并按照 http://www.scala-sbt.org/sbt-native-packager/archetypes/cheatsheet.html#extra-defines 的详细信息将更改直接硬编码到运行以启动二进制文件的 shell 脚本中
就可能的情况而言,这是最灵活的选项(您可以编写任何有效的 bash 代码,并将其添加到启动脚本中)。但它也不太灵活,因为它以后不可修改;任何可选的计算都必须用 bash 脚本语言来描述。
【讨论】:
也可以通过jvmOptions in Universal
添加jvmOption,生成application.ini
以上是关于为使用 sbt-native-packager 创建的可执行文件设置 JVM 选项的推荐方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
如何在运行时为使用 sbt-native-packager 捆绑的应用程序加载配置文件
将 akka-sbt-plugin 输出目录压缩为单个 tar(可能使用 sbt-native-packager)?
如何在多个项目中使用 sbt-native-packager
如何使用 sbt-native-packager 创建基本项目设置