为使用 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/defaultapplication.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 创建基本项目设置

新贵的 daemonUser 在 sbt-native-packager 中不起作用

构建 deb 包时无法使用 sbt-native-packager 打包 cron 作业