ネイティブ実行可能ファイルにリソースを含める
次のステップでは、ネイティブ実行可能ファイルにリソースを含める方法について説明します。アプリケーションfortune
は、従来のfortune
UNIXプログラムをシミュレートします(詳細は、fortuneに関する項を参照)。
-
次の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(); } }
-
fortunes.u8リソース・ファイルをダウンロードし、Fortune.javaと同じディレクトリに保存します。
-
Javaソース・コードをコンパイルします:
$JAVA_HOME/bin/javac Fortune.java
-
リソース・パスを指定してネイティブの実行可能ファイルをビルドします:
$JAVA_HOME/bin/native-image Fortune -H:IncludeResources=".*u8$"
-
実行可能ファイルのイメージを実行します:
./fortune