これまでScalaでGraalVMのネイティブイメージ生成機能を使う場合はsbt-native-packagerプラグインを使用していたのですが、最近新たにsbt-native-imageというプラグインがリリースされたとのことで実際に試してみました。
Released the first version of sbt-native-image, a new sbt plugin to generative native-image binaries https://t.co/WYFVnQg4xK
— Ólafur Páll Geirsson (@olafurpg) August 29, 2020
まずは例によってproject/plugins.sbt
にプラグインを追加します。
addSbtPlugin("org.scalameta" % "sbt-native-image" % "0.2.1")
次にbuild.sbt
に以下の記述を追加してプラグインを有効にします。
enablePlugins(NativeImagePlugin)
最低限の準備はこれで完了です。sbt nativeImage
を実行するとtarget/native-image
ディレクトリに実行可能ファイルが生成されます。
指定可能なタスクやオプションはREADMEで説明されています。たとえばJVMにフォールバックしないネイティブイメージを生成するのであればbuils.sbt
に以下の設定を追加します。
nativeImageOptions ++= List( "--initialize-at-build-time", "--no-fallback", "--no-server" )
sbt-native-packagerと比較して、できることに大きな差はないのですが、やはりGraalVMを事前にインストールしておく必要がないという点は大きなアドバンテージです。また、GraalVMのバージョンをsbtの設定で指定することができるのもビルド環境の差異によるトラブルを減らすのに役立つのではないかと思います。
以前作ったScalaによるネイティブCLIアプリケーション作成用のgiter8テンプレートもsbt-native-imageプラグインを使うように修正しておきました。