ネイティブ実行可能ファイルにリソースを含める

次のステップでは、ネイティブ実行可能ファイルにリソースを含める方法について説明します。アプリケーションfortuneは、従来のfortune UNIXプログラムをシミュレートします(詳細は、fortuneに関する項を参照)。

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

  2. 次のJavaソース・コードをFortune.javaという名前のファイルとして保存します:

     import java.io.BufferedReader;
     import java.io.InputStreamReader;
     import java.util.ArrayList;
     import java.util.Random;
     import java.util.Scanner;
    
     public class Fortune {
    
         private static final String SEPARATOR = "%";
         private static final Random RANDOM = new Random();
         private ArrayList<String> fortunes = new ArrayList<>();
    
         public Fortune(String path) {
             // Scan the file into the array of fortunes
             Scanner s = new Scanner(new BufferedReader(new InputStreamReader(this.getClass().getResourceAsStream(path))));
             s.useDelimiter(SEPARATOR);
             while (s.hasNext()) {
                 fortunes.add(s.next());
             }
         }
            
         private void printRandomFortune() throws InterruptedException {
             int r = RANDOM.nextInt(fortunes.size()); //Pick a random number
             String f = fortunes.get(r);  //Use the random number to pick a random fortune
             for (char c: f.toCharArray()) {  // Print out the fortune
               System.out.print(c);
                 Thread.sleep(100); 
             }
         }
          
         public static void main(String[] args) throws InterruptedException {
             Fortune fortune = new Fortune("/fortunes.u8");
             fortune.printRandomFortune();
         }
     }
    
  3. fortunes.u8リソース・ファイルをダウンロードし、Fortune.javaと同じディレクトリに保存します。

  4. Javaソース・コードをコンパイルします:
     $JAVA_HOME/bin/javac Fortune.java
    
  5. リソース・パスを指定してネイティブの実行可能ファイルをビルドします:
     $JAVA_HOME/bin/native-image Fortune -H:IncludeResources=".*u8$"
    
  6. 実行可能ファイルのイメージを実行します:
     ./fortune