mike-neckのブログ

Java or Groovy or Swift or Golang

graalvm-native-image-plugin の v1.4.0 をリリースしました

表記の通り、 Gradle プラグインの graalvm-native-image-plugin の v1.4.0 をリリースしました。

plugins.gradle.org

このリリースでは以下の機能が追加されました。

  • シェアードライブラリーをビルドする機能(Java11 以降のみ)
  • 上記の機能追加に伴う、 nativeImage#setMainClass(String) メソッドの非推奨化

シェアードライブラリーをビルドする機能(Java11 以降のみ)

以下のイシューにより対応しました。

github.com

この機能追加により、 nativeImage {} ブロックの中の記述方法が少々変わりました。

従来どおり実行ファイルを作る場合は以下のように main メソッドのあるクラスを buildType { executable { main } } に記述します

nativeImage {
  graalVmHome = '/path/to/graal'
  // 従来は mainClass = ... と指定していたが、非推奨に
  // 今後は 若干ややこしいもののこの形で指定します
  buildType { build ->
    build.executable { main = 'com.example.App' }
  }
  executableName = 'bin-file-name'
  outputDirectory = file("$buildDir/bin")
}

シェアードライブラリーを作る場合は以下のように buildType {} 内で sharedLibrary を指定します

nativeImage {
  graalVmHome = '/path/to/graal'
  buildType { build ->
    build.sharedLibrary
  }
  executableName = 'bin-file-name'
  outputDirectory = file("$buildDir/bin")
}

上記のように指定した場合、 build/bin/bin-file-name.hbuild/bin/bin-file-name.so といったファイルなどが生成されます(OS X の場合は dylib ファイルなど)。