javafxpackagerコマンドでクラスパス指定なしにJavaFXアプリを実行するJARの生成
NetBeansでJavaFXアプリケーションプロジェクトを用いて作成したプログラムのJARファイルは、JavaFX関連のクラスパスを指定せずとも実行可能でした。
これと同じことを、NetBeansではなくコマンドでコンパイルするときにどう実現するかを探ってみました。
JavaFX 2プログラムの作成
普通に作成します。JARファイル作成上、ソースファイルとクラスファイルは別なディレクトリに生成しておきます。
とりあえず、次のようなディレクトリを作成します。
work +-- classes +-- src +-- torutk +-- HelloFx.java
HelloFxは、とりあえずボタンが1個の単純なもので作成。
package torutk; import javafx.application.Application; import javafx.stage.Stage; import javafx.scene.layout.BorderPane; import javafx.scene.control.Button; import javafx.scene.Scene; public class HelloFx extends Application { @Override public void start(Stage primaryStage) { primaryStage.setTitle("Hello JavaFX"); BorderPane borderPane = new BorderPane(); Button helloButton = new Button("HelloFx"); borderPane.setCenter(helloButton); primaryStage.setScene(new Scene(borderPane, 320, 300)); primaryStage.show(); } public static void main(String[] args) { launch(args); } }
コンパイル
ここはふつうにjavacコマンドでコンパイルします。つまり、コンパイル時はJavaFX関連ライブラリへのクラスパス指定が必要です。
C:\work> javac -cp "C:\Program Files\Java\jdk1.7.0\jre\lib\jfxrt.jar";classes -sourcepath src src\torutk\HelloFx.java C:\work>
実行可能JARの作成
javafxpackagerコマンドでJavaFX実行可能JARファイルを作成します。javafxpackagerコマンドのドキュメント(英語)は次のURLです。
C:\work> javafxpackager -createjar -appclass torutk.HelloFx -srcdir classes -outdir dist -outfile HelloFx-0.1 C:\work>
javafxpackagerコマンドは、JDK 7u6では[JDKインストールディレクトリ]\binの下(javac.exeなどと同じ)にあります。
- createjar オプションは、コンパイル済みのクラスファイルなどから実行可能JARを生成します。
- appclass オプションは、アプリケーションの主クラスをFQCNで指定します。
- outdir オプションは、JARファイルを出力するディレクトリを指定します。
- outfile オプションは、JARファイル名(拡張子.jarは省略可)を指定します。
この他にも、-preloader, -paramfile -argument -classpath, -manifestAttrs, -noembedlauncher, -noccs2bin, -runtimeversion, -srcfiles などのオプションがあります。詳しくはドキュメントを参照ください。
メモ
javafxpackagerには、-makeallでソースから一気にJAR生成までするオプションもありますが、コンパイルエラー(デフォルトでは-source 1.5が適用されるらしく、Java SE 7の文法でエラー)になってしまいました。-source 7をどう指定するかが分からず放置。
ant-javafx.jarを使ってAntのビルドも可能ですが未確認。この方法を紹介している日本語のブログページを見つけましたのでURLを記します。
javafxpackagerには、MSI形式のインストーラなど各種OS固有のインストーラを作成する機能もあるようです。MSI形式の場合、別途Wixのインストールが必要なようです。
JavaFXは、単に新しいGUIライブラリというだけでなく、(デスクトップ)アプリケーションの作成・配布に新しい形態をもたらす要素技術がいろいろ含まれているのですね。先行き楽しみな技術です。