概要
GraalVMを使うとJavaアプリケーションをネイティブイメージ化できます。(JVM不要で実行できる)
パフォーマンスなどJVMで実行するのとかなり異なる特性を持ちますが、ここでは触れません。
Windowsでビルドを試したので、その手順だけ書きます。
環境
- Windows 11
- Java 17
- Gradle 7.4(Kotlin DSL)
手順
Javaアプリケーションを書く
もちろんビルド対象のアプリケーションを書く必要があります。試すだけならHello worldでいいですが、私は(機能限定版ですが)tailコマンドを作ってみました。
Visual Studioをインストールする
ネイティブイメージ化はGraalVMからC++のコンパイラを呼んで実行されるようです。なのでそのためのコンパイラが必要です。
コンパイラはいくつかあると思いますが、Visual Studioをインストールするのがいいようです。
現時点で最新版のVisual Studio 2022の無料版でいいです。
インストールするコンポーネントを選べます。私はいろいろやりたくていくつか選んだのですが、とりあえず「C++によるデスクトップ開発」だけ選べばよいかと思います。
gradle-graalプラグインの導入
GraalVMを直接インストールしてもいいですが、Gradleプラグインを使うと自動的にダウンロードしてくれて比較的簡単にできます。
以下のような感じです。
plugins {
id("java")
id("application")
id("com.palantir.graal") version "0.12.0"
}
graal {
mainClass("com.github.dhirabayashi.mytail.MyTail")
outputName("mytail")
graalVersion("22.1.0")
javaVersion("17")
windowsVsVersion("2022")
windowsVsEdition("BuildTools")
}
全体はこれです。実行可能Jarを作るための定義もありますが、もしかしたら必須じゃないかもしれません。
https://github.com/dhirabayashi/mytail/blob/master/build.gradle.kts
ビルドの実行
あとはGradleから nativeImage
タスクを実行すればOKです。
ただ、普通に実行するとGradleがC++コンパイラを見つけられなくて失敗します。Visual Studioをインストールしたときに追加される専用のコマンドプロンプトを使うと解決します。
> set JAVA_HOME=C:\Users\****\.jdks\corretto-17.0.3
> gradlew nativeImage
これで問題なければ build/graal
ディレクトリの下にバイナリが生成されます。