sbt native packager 中的命令行选项

command line options in sbt native packager

当你使用 sbt-native-packager 插件在 sbt 中打包一个命令行应用程序时,你会得到一个包装脚本,它有额外的命令行选项,看起来像这样。

  -h | -help         print this message
  -v | -verbose      this runner is chattier
  -d | -debug        set sbt log level to debug
  -no-version-check  Don't run the java version check.
  -mem <integer>     set memory options in MB (default: , which is -Xms1024m -Xmx1024m -XX:MaxPermSize=256m -XX:ReservedCodeCacheSize=128m)
  -jvm-debug <port>  Turn on JVM debugging, open at the given port.

  # java version (default: java from PATH, currently java version "1.7.0_21")
  -java-home <path>         alternate JAVA_HOME

  # jvm options and output control
  JAVA_OPTS          environment variable, if unset uses ""
  -Dkey=val          pass -Dkey=val directly to the java runtime
  -J-X               pass option -X directly to the java runtime
                     (-J is stripped)

  # special option
  --                 To stop parsing built-in commands from the rest of the command-line.
                     e.g.) enabling debug and sending -d as app argument
                     $ ./start-script -d -- -d

是否可以有选择地禁用其中一些选项或将它们从打包的应用程序中一起删除?。

首先,无法禁用 单个命令行选项。但是你可以做一些其他的事情。

  1. 正如 Shyam 正确提到的那样,您可以 override the start script
  2. 第二个选项是使用 -- 分隔符。之前的所有内容都将由脚本解析,之后的所有内容都将作为应用程序命令行附加。

如果您有可能对公开可用性感兴趣的用例,可以打开功能请求。

干杯, 向

对于 bash 脚本,您可以将其添加到您的 sbt 配置中:

bashScriptExtraDefines += """set -- -- "$@""""

这有效地将 -- 添加到传入的命令行参数中,包装器将使用这些参数。包装器然后在这个前缀 --

之后传递所有内容

您可以通过将 -- 附加到 java 选项来独立于平台完全禁用它们:

javaOptions in Universal += "--"

这必须是最后一个 java 选项,以便在您设置您可能已经拥有的任何自定义 java 选项后注入它。很明显,这是非常 hacky,因为 -- 并不是真正的 java 选项,但目前 native-packager 不会检查它是否是。