Java でプログラミングをする一番大きな理由は、(自分にとっては)クロスプラットフォームな言語だからです。UI はプログラミングの一部であると思っているので、最も身近なデスクトップの GUI にフォーカスして取り組んでいますが、JavaFX を使うようになってからは、手軽に JavaFX を扱える NetBeans IDE ばかりを使うようになりました。NetBeans IDE では、アプリケーションをビルドするとプロジェクトディレクトリの中に dist というディレクトリを作成し、アプリケーション全てをまとめた jar ファイルを作成してくれます。
これだけでも結構重宝するのですが、NetBeans IDE が動作しているプラットフォーム (OS) に対応したインストールパッケージを作成する機能もあります。これを NetBeans IDE では「ネイティブ・パッケージング」と呼んでいます。結構嬉しい機能です。
上記サイトでは Windows を例にして、詳しく説明がされていますので、ここでは RPM 系 Linux である Fedora の場合について紹介したいと思います。Linux 上で動作する NetBeans IDE では、このネイティブ・パッケージングで Red Hat 系の RPM あるいは Debian 系の deb パッケージを作成します。
動作環境は次の通りです。
- OS: Fedora 23 (x86_64)
- Java: jdk1.8.0_74-1.8.0_74-fcs.x86_64 (Oracle)
- IDE: NetBeans IDE 8.1
まず、RPM パッケージ作成に必要な rpm-build パッケージをインストールしておきます。
$ rpm -qa | grep rpm-build
rpm-build-4.13.0-0.rc1.12.fc23.x86_64
rpm-build-libs-4.13.0-0.rc1.12.fc23.x86_64
$
RPM パッケージ化するサンプルとして、JavaFX のサンプルである BrickBreaker を使います。新規プロジェクトを作成する際に、カテゴリの下の方に「サンプル」がありますので JavaFX を選びプロジェクトの欄から BrickBreaker を選んで、「次へ」ボタンをクリックします。
「終了」ボタンをクリックして、BrickBreaker プロジェクトを作成します。
ファイルタブでプロジェクト BrickBreaker を選択、右クリックしてプロパティを選択してプロジェクトのプロパティ・ウィンドウを開きます。
左側のカテゴリのリストから、「ビルド」→「デプロイメント」を選択します。
「ネイティブ・パッケージの有効化」をチェックします。
「アイコンとスプラッシュ・イメージ」の「編集」ボタンをクリックして。「ネイティブ・パッケージ・アイコン」の欄に適当なアイコン画像を指定しておきます。
ここでは、以下のような Linux のマスコット Duke の 128x128 ピクセルの PNG 画像を指定しています。
ビルドされるパッケージの名前に付加されるバージョン番号は、カテゴリ「アプリケーション」の画面で指定します。ここでは 1.0 のままにします。
プロジェクト BrickBreaker を選択して、メニューから「実行」→「プロジェクト(BrickBreaker)を消去してビルド」を選択して、プロジェクトをビルドします。
プロジェクトタブでプロジェクト BrickBreaker を選択、右クリックして「パッケージとして」→「RPMパッケージ」を選択します。
すると、「出力」ウィンドウに下記のようなメッセージが表示され、しばらく待つと「ビルド成功」と緑字で表示されて終了します。RPM パッケージは NetBeansProjects/BrickBreaker/dist/bundles 以下に作成されています。
ant -f /home/bitwalk/NetBeansProjects/BrickBreaker -Djar.archive.disabled=true -Dnative.bundling.type=rpm build-native
build-native:
init:
deps-clean:
Updating property file: /home/bitwalk/NetBeansProjects/BrickBreaker/build/built-clean.properties
Deleting directory /home/bitwalk/NetBeansProjects/BrickBreaker/build
clean:
init:
deps-jar:
Created dir: /home/bitwalk/NetBeansProjects/BrickBreaker/build
Updating property file: /home/bitwalk/NetBeansProjects/BrickBreaker/build/built-jar.properties
Created dir: /home/bitwalk/NetBeansProjects/BrickBreaker/build/classes
Created dir: /home/bitwalk/NetBeansProjects/BrickBreaker/build/empty
Created dir: /home/bitwalk/NetBeansProjects/BrickBreaker/build/generated-sources/ap-source-output
Compiling 10 source files to /home/bitwalk/NetBeansProjects/BrickBreaker/build/classes
警告: [options] ブートストラップ・クラスパスが-source 1.6と一緒に設定されていません
警告1個
Copying 45 files to /home/bitwalk/NetBeansProjects/BrickBreaker/build/classes
compile:
Created dir: /home/bitwalk/NetBeansProjects/BrickBreaker/dist
Detected JavaFX Ant API version 1.3
Launching task from /usr/java/jdk1.8.0_74/jre/../lib/ant-javafx.jar
Warning: From JDK7u25 the Codebase manifest attribute should be used to restrict JAR repurposing.
Please set manifest.custom.codebase property to override the current default non-secure value '*'.
Launching task from /usr/java/jdk1.8.0_74/jre/../lib/ant-javafx.jar
Note: To create native bundles the task may require external tools. See JavaFX 2.2+ documentation for details.
Launching in native packager mode...
Copying 1 file to /home/bitwalk/NetBeansProjects/BrickBreaker/build/icon
Source native icon reference: /home/bitwalk/画像/duke3D-128.png
Processed native icon reference: /home/bitwalk/NetBeansProjects/BrickBreaker/build/icon/BrickBreaker.png
ベースJDKがありません。パッケージはシステムJREを使用します。
ベースJDKがありません。パッケージはシステムJREを使用します。
パッケージ(.rpm)は次に保存されました: /home/bitwalk/NetBeansProjects/BrickBreaker/dist/bundles
jfx-deployment-script:
jfx-deployment:
jar:
jfx-rebuild:
jfx-build-native:
ビルド成功(合計時間: 1分17秒)
早速インストールしてみます。なお、このパッケージには実行に必要なランタイム (JRE) が含まれていて、インストール先は /opt 以下になります。
[bitwalk@notepc ~]$ cd NetBeansProjects/BrickBreaker
[bitwalk@notepc BrickBreaker]$ ls
build build.xml dist manifest.mf nbproject src
[bitwalk@notepc BrickBreaker]$ cd dist/bundles
[bitwalk@notepc bundles]$ ls
brickbreaker-1.0-1.x86_64.rpm
[bitwalk@notepc bundles]$ su
パスワード:
[root@notepc bundles]# dnf install brickbreaker-1.0-1.x86_64.rpm
メタデータの期限切れの確認は、2:16:33 前の Sun Mar 6 10:44:44 2016 に実施しました。
依存性が解決されました。
================================================================================
Package アーキテクチャ
バージョン リポジトリ 容量
================================================================================
インストール:
alsa-lib i686 1.0.29-2.fc23 fedora 392 k
brickbreaker x86_64 1.0-1 @commandline 52 M
glibc i686 2.22-11.fc23 updates 4.3 M
libX11 i686 1.6.3-2.fc23 fedora 616 k
libXau i686 1.0.8-5.fc23 fedora 34 k
libXext i686 1.3.3-3.fc23 fedora 43 k
libXi i686 1.7.6-1.fc23 updates 46 k
libXrender i686 0.9.9-2.fc23 fedora 30 k
libXtst i686 1.2.2-5.fc23 fedora 25 k
libgcc i686 5.3.1-2.fc23 updates 97 k
libxcb i686 1.11.1-1.fc23 updates 206 k
nss-softokn-freebl i686 3.22.2-1.0.fc23 updates 197 k
トランザクションの要約
================================================================================
インストール 12 パッケージ
合計容量: 58 M
総ダウンロード容量: 5.9 M
インストール済み容量: 207 M
これでいいですか? [y/N]: y
パッケージをダウンロードしています:
(1/11): libXext-1.3.3-3.fc23.i686.rpm 277 kB/s | 43 kB 00:00
...
(省略)
...
(11/11): glibc-2.22-11.fc23.i686.rpm 2.5 MB/s | 4.3 MB 00:01
--------------------------------------------------------------------------------
合計 626 kB/s | 5.9 MB 00:09
トランザクションの確認を実行中...
トランザクションの確認に成功しました。
トランザクションのテストを実行中...
トランザクションのテストに成功しました。
トランザクションを実行中...
インストール : libgcc-5.3.1-2.fc23.i686 1/12
...
(省略)
...
検証中 : nss-softokn-freebl-3.22.2-1.0.fc23.i686 12/12
インストール:
alsa-lib.i686 1.0.29-2.fc23 brickbreaker.x86_64 1.0-1
glibc.i686 2.22-11.fc23 libX11.i686 1.6.3-2.fc23
libXau.i686 1.0.8-5.fc23 libXext.i686 1.3.3-3.fc23
libXi.i686 1.7.6-1.fc23 libXrender.i686 0.9.9-2.fc23
libXtst.i686 1.2.2-5.fc23 libgcc.i686 5.3.1-2.fc23
libxcb.i686 1.11.1-1.fc23 nss-softokn-freebl.i686 3.22.2-1.0.fc23
完了しました!
[root@notepc bundles]#
GNOME デスクトップの「アクティビティ」をクリックして、アプリケーションを表示すると、Duke のアイコンの BrickBreaker が追加されています。
下記のように BrickBreaker が起動しました。