JARファイルからのネイティブ実行可能ファイルのビルド

ネイティブ実行可能ファイルは、クラス・ファイルから、JARファイルから、またはモジュールからビルドできます。このガイドでは、ネイティブ実行可能ファイルをJARファイルからビルドする方法を示します。

現在の作業ディレクトリ内のJARファイルからネイティブ実行可能ファイルをビルドするには、次のコマンドを使用します:

native-image [options] -jar jarfile [executable name]

デモの実行

前提条件

GraalVM JDKがインストール済であることを確認します。最も簡単に始めるには、SDKMAN!を使用します。その他のインストール・オプションについては、「ダウンロード」セクションを参照してください。

  1. アプリケーションを準備します。

    • たとえば、お気に入りのIDEや端末で、"App"という名前の新しいJavaプロジェクトを次の構造で作成します:
        | src
        |   --com/
        |      -- example
        |          -- App.java
      
    • 次のJavaコードをsrc/com/example/App.javaファイルに追加します:
        package com.example;
      
        public class App {
      
            public static void main(String[] args) {
                String str = "Native Image is awesome";
                String reversed = reverseString(str);
                System.out.println("The reversed string is: " + reversed);
            }
      
            public static String reverseString(String str) {
                if (str.isEmpty())
                    return str;
                return reverseString(str.substring(1)) + str.charAt(0);
            }
        }
      

      これは、再帰を使用して文字列を逆にする小さいJavaアプリケーションです。

  2. アプリケーションをコンパイルします:
     javac -d build src/com/example/App.java
    

    これにより、build/com/example/ディレクトリにApp.classファイルが生成されます。

  3. 実行可能なJARファイルを作成します:
     jar --create --file App.jar --main-class com.example.App -C build .
    

    プロジェクト・ルート・ディレクトリにApp.jarという名前の実行可能なJARファイルが生成されます。その内容を表示するには、次のコマンドを実行します:

     jar tf App.jar
    
  4. ネイティブ実行可能ファイルを作成します:
     native-image -jar App.jar
    

    プロジェクト・ルート・ディレクトリにネイティブ実行可能ファイルが生成されます。実行可能ファイルのデフォルト名は、JARファイルの名前になります(この場合は"App")。これをカスタマイズするには、最後の引数としてカスタム名を指定するか(たとえば、native-image -jar App.jar executable_name)、-jar jarfileの前または後に-o executable_nameを使用します(たとえば、native-image -jar App.jar -o executable_name)。

  5. ネイティブ実行可能ファイルを実行します:
     ./App
    

native-imageのデフォルトの動作は、javaコマンドと一致しています。これは、javaで通常行うように、-jar-cp-mオプションを渡してネイティブ・イメージでビルドできることを意味します。たとえば、java -jar App.jar someArgumentnative-image -jar App.jarおよび./App someArgumentになります。