ネイティブ実行可能ファイルへのJavaモジュールのビルド

GraalVMネイティブ・イメージは、Java 9で導入されたJavaプラットフォーム・モジュール・システムをサポートしています。つまり、モジュール化されたJavaアプリケーションをネイティブ実行可能ファイルに変換できます。

native-imageツールは、--module (-m)、--module-path (-p)、--add-opens--add-exportsなどのモジュール関連の引数を受け入れます(javaランチャの場合と同じ)。そのようなモジュール関連の引数が使用されるとき、native-imageツール自体もモジュールとして使用されます。

--add-readsおよび--add-modulesのサポートに加えて、モジュール・パスをスキャンする前に、すべてのモジュール関連オプションが考慮されます。これにより、クラス・ロード・エラーを防止し、実行時にモジュール・イントロスペクションを改善できます。

Javaモジュールからネイティブ実行可能ファイルをビルドするコマンドは次のとおりです:

native-image [options] --module <module>[/<mainclass>] [options]

デモの実行

次のステップに従って、モジュラJavaアプリケーションをネイティブ実行可能ファイルにビルドします。このデモでは、Mavenで収集された単純なHelloWorld Javaモジュールを使用します:

├── hello
│   └── Main.java
│       > package hello;
│       > 
│       > public class Main {
│       >     public static void main(String[] args) {
│       >         System.out.println("Hello from Java Module: "
│       >             + Main.class.getModule().getName());
│       >     }
│       > }
│
└── module-info.java
    > module HelloModule {
    >     exports hello;
    > }
  1. GraalVM JDKがインストール済であることを確認します。最も簡単に始めるには、SDKMAN!を使用します。その他のインストール・オプションについては、「ダウンロード」セクションを参照してください。

  2. デモ・リポジトリをダウンロードまたはクローニングし、ディレクトリnative-hello-moduleに移動します:
     git clone https://github.com/graalvm/graalvm-demos
     cd graalvm-demos/native-hello-module
    
  3. Mavenを使用してプロジェクトをコンパイルおよびパッケージ化します:
     mvn package
    
  4. GraalVMのJDKでの実行をテストします:
     $JAVA_HOME/bin/java --module-path target/HelloModule-1.0-SNAPSHOT.jar --module HelloModule
    
  5. 次に、このモジュールをネイティブ実行可能ファイルにビルドします:
     $JAVA_HOME/bin/native-image --module-path target/HelloModule-1.0-SNAPSHOT.jar --module HelloModule
    

    モジュラJavaアプリケーションを、実行可能なプロジェクト・ルート・ディレクトリ内のhellomoduleというネイティブ実行可能ファイルにビルドします:

     ./hellomodule