为使用sbt-native-packager创建的可执行文件设置JVM选项的推荐方法是什么?

时间:2015-08-20 13:25:43

标签: scala sbt jvm-arguments sbt-native-packager

目前,我在命令行中使用export JAVA_OPTS ...,但似乎还有其他可能性,使用build.sbt或外部属性文件。

我发现了几个相关的github问题hereherehere但是很多选项都令人困惑。有推荐的方法吗?

1 个答案:

答案 0 :(得分:2)

您设置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将更改直接硬编码到运行以启动二进制文件的shell脚本中,并按照http://www.scala-sbt.org/sbt-native-packager/archetypes/cheatsheet.html#extra-defines

的详细信息进行操作

就可能的情况而言,这是最灵活的选项(您可以编写任何有效的bash代码,并将其添加到启动脚本中)。但它的灵活性也较低,因为之后不可修改;任何可选的计算都必须用bash脚本语言来描述。