Javaで業務向けのマルチプラットフォームアプリを作ろうと思ったのが2013年、当時はRIAという言葉もすっかり死語になっていた頃になぜこのようなことをやろうとしたかというと、Javaで作られた既存の遺産が使えるからというだけで、今ならElectron(イマイチ流行ってないか?)やJava FX(死語か?)も選択肢に入ってくるのだろうが。
GUIはさすがにAWT, Swingはないだろうと思っていたので、Eclipseで実績があり、割と動作が機敏なJFace, SWTを使用した。
また要件として自動アップデート付きネット配信、exeでの単体配布も可能というものもあったので、JWS(Java Web Start), Launch4jも使用した。
すでに断片的情報しか覚えていないのできっとあまり役に立ちません。
- 役に立ったwebページ(日本語サイトは少ない)
Enhancing Security with Manifest Attributes
Unofficial Java Web Start/JNLP FAQ
Eclipse RCP application using Java web start not starting up
jnlpファイルの書き方(特にアップデート周り)
複数Jarをどうやって置くか
jar in jar loader
なぜだか忘れたが、複数のjarを一つのjarにまとめなければならず、EclipseでExportするときに何かを選択するとJar-in-jar-loader.zipが生成され、jarの中にjarを内包することができるようになる
antでビルドする
あとから一部Gradleにしたが、当時はEclipseからant.xmlを吐き出して作成した。
Launch4jによるexeの作り方
iconを用意する必要がある
参考サイト
JavaアプリをExe化するLaunch4jの使い方と仕組み
Javaセキュリティ設定の外し方
正規の方法ではアプリ証明書を使えば余計なダイアログは出なくなるはずだが、ここでは試作なのでオレオレ証明書でjarのsigningをし、クライアント側のJava設定にDL元のURLを入力してダウンロード&インストールを可能にする。それでも毎回ダイアログはでた気がする。
keytoolでオレオレ証明書を作成し、jarsignerをビルド時に実行するようにしておく。
アプリ証明書をどうするか
GMOが提供しているコードサイニング証明書が一番安そうだが1年間¥57,000(当時)でバカにならないので保留。
社内利用だけで商用ではないのに警告ダイアログを出ないようにするだけで年間万単位の支払いはないでしょということ。
参考サイト
コードサイニング証明書(GMO)
Chromeでの注意
Chromeはjnlpをダウンロードするだけで自動実行してくれないのでユーザが自分でクリックしないといけない。
Macでの実行
そのままでは起動せず、なにか引数みたいなものをつけた記憶があるが、忘れた。