mike-neckのブログ

Java or Groovy or Swift or Golang

Windows で GraalVM の native-image を動かす場合の手順

この前教えてもらったりして一通り理解したつもりだったけど忘れてしまって調べ直したという経緯から記録にしておこうと思った。また、 GraalVM で native-image やってみましたと言っている日本語のブログなどが、すべて Mac / Linux が前提で、 Windows での native-image について日本語で書かれたものがないので書くことにしました。


環境

  • Windows 10
  • 潤沢なメモリ(少なくとも 8GB のマシンだとハロワのプログラムでもカツカツになる(Azure の DS2_v2 サイズでも何度かメモリ不足で失敗しました)、 16GB くらいは最低でも必要だと思われる)

事前準備

実行手順

  1. コマンドプロンプトを立ち上げる(WSL ではできないかも)
  2. C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd を実行して、 native image の生成に必要なファイルが解決できるようにする
  3. native-image を叩く際のパラメーターを ダブルクォーテーションで括る(以下のコマンド例のような形になる)
C:\Users\testuser\graalvm-ce-java8-19.3.0.2\jre\bin\native-image.cmd ^
  -cp ^
    "C:\Users\testuser\.gradle\caches\modules-2\files-2.1\com.google.guava\guava\28.0-jre\54fed371b4b8a8cce1e94a9abd9620982d3aa54b\guava-28.0-jre.jar;C:\Users\testuser\.gradle\caches\modules-2\files-2.1\com.google.guava\failureaccess\1.0.1\1dcf1de382a0bf95a3d8b0849546c88bac1292c9\failureaccess-1.0.1.jar;C:\Users\testuser\.gradle\caches\modules-2\files-2.1\com.google.guava\listenablefuture\9999.0-empty-to-avoid-conflict-with-guava\b421526c5f297295adef1c886e5246c39d4ac629\listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar;C:\Users\testuser\.gradle\caches\modules-2\files-2.1\com.google.code.findbugs\jsr305\3.0.2\25ea2e8b0c338a877313bd4672d3fe056ea78f0d\jsr305-3.0.2.jar;C:\Users\testuser\.gradle\caches\modules-2\files-2.1\org.checkerframework\checker-qual\2.8.1\eb2e8ab75598548cc8acf9a1ca227e480e01881e\checker-qual-2.8.1.jar;C:\Users\testuser\.gradle\caches\modules-2\files-2.1\com.google.errorprone\error_prone_annotations\2.3.2\d1a0c5032570e0f64be6b4d9c90cdeb103129029\error_prone_annotations-2.3.2.jar;C:\Users\testuser\.gradle\caches\modules-2\files-2.1\com.google.j2objc\j2objc-annotations\1.3\ba035118bc8bac37d7eff77700720999acd9986d\j2objc-annotations-1.3.jar;C:\Users\testuser\.gradle\caches\modules-2\files-2.1\org.codehaus.mojo\animal-sniffer-annotations\1.17\f97ce6decaea32b36101e37979f8b647f00681fb\animal-sniffer-annotations-1.17.jar;C:\Users\testuser\git-projects\app\build\libs\app.jar" ^
  "-H:Path=C:\Users\testuser\git-projects\app\build\native-image" ^
  "-H:Name=app" ^
  "--no-fallback" ^
  "--enable-all-security-services" ^
  "--initialize-at-run-time=com.example.runtime" ^
  "--report-unsupported-elements-at-runtime" ^
  "-H:+ReportExceptionStackTraces" ^
  "com.example.App"