2015-02-11

SpringBootアプリjavafxを使って配布しやすくしよう

概要

Javaで開発されたアプリケーションにはインストールにまつわる難点がある。

それによりせっかく興味をもってくれたユーザーも試す前に諦めてしまいがちである

また、サーバーサイドアプリケーションJavaである場合デプロイ監視の際の難点が多く運用者を悩ませてきた。

javafxで導入されたパッケージャを用いることで各OSネイティブインストーラーの作成が可能になり、この問題を解消・緩和できる。

SpringBoot などを用いた ExecutableJar作成するアプリケーションであれば、サーバーサイドアプリケーションであっても一部制限があるものパッケージングできる。

問題点の整理

Javaで開発されたアプリケーションの配布には以下の問題点がある。

解決方法として

javafx-maven-pluginを使うとよい。javafxと冠しているが実態パッケージングツール

javafxの冠があるがためにスタンドアロンアプリ開発者以外を遠ざけている感あり。

Windows(msi/exe), Linux(rpm/deb), Mac(dmg) など各OSディストリビューション固有のパッケージングが行える。

公式ページ( http://zenjava.com/javafx/maven/ )では更新が止まっているが、Github( https://github.com/zonski/javafx-maven-plugin )とMavenRepository( http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22com.zenjava%22%20AND%20a%3A%22javafx-maven-plugin%22 )を確認するとちゃんと開発は続いている。

実際にどのようにすればパッケージングできるか

まずアプリケーションmaven アプリとして開発する。

pom.xml に以下を追加する。

mainClassはSpringBootなら@SpringBootApplicationのついてるクラスですね。

vendor適当組織や個人の名前を入れておきましょう。

※ 以下の XML が化けるのは増田不具合仕様っぽい。 http://anond.hatelabo.jp/20100205210805

<plugin>
  <groupId>com.zenjava</groupId>
  <artifactId>javafx-maven-plugin</artifactId>
  <version>8.1.2</version>
  <configuration>
    <mainClass>[main method class]</mainClass>
    <vendor>[Vendor Name]</vendor>
  </configuration>
</plugin>

あとはそのままビルドすればよい。

maven clean jfx:native

ビルドが終わると target/jfx/native 以下に、ビルドしたOS/distributionに合わせて msi, exe, deb, rpm, dmg ができあがります

本当であればクロスビルドできてしかるべきなのですが、まだ実現はされていないようです。

これらのパッケージは Widonws であれば Program Files(x86) に、Linux系であれば /opt/ の下にインストールされるようです。

/opt/app-name/ の下には app と runtime の2つのディレクトリがあります

app の下にはビルドした jar ファイル依存ライブラリが置かれています

runtime の下には実行用の jre が配備されています

実行ファイルにそのまま引数を渡せば jar 実行時の引数としてそのまま渡されます。(-Xmxなどはまだ未検証です)

課題

OS毎の注意点

記事への反応 -

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん