#navi_header|Java| 背景: - Java11でpublic JREが無くなる。このため、JREをインストールしておいてもらえば、あとは実行可能jarファイル渡してダブルクリックするだけでOS側の拡張子連携によりJavaプロセス起動、という方式が採用しづらくなる。 -- public JREが無いということは、OS側に拡張子 .jar をjavaコマンドで実行する連携設定をインストーラ一発で入れられないということ、と理解して上の文章を書いてる。 -- 参考 : Java 11ではPublic JREが本当になくなりました - AOEの日記 --- https://aoe-tk.hatenablog.com/entry/2018/10/20/230506 - JDK8までは javapackager というコマンドで、Inno Setup などサードパーティ製のインストーラ生成ツールと連携し、JREバンドルしたパッケージングが可能だった(っぽい)。 -- javapackager : https://docs.oracle.com/javase/jp/8/docs/technotes/tools/windows/javapackager.html - Java11から、JREバンドルして、exeか何かダブルクリックするだけで実行できる配布方式どうすりゃええねん・・・。 この辺の、2015年・・・Java8が出る前後くらいの時代の、方式やツール類が比較的よくまとめられてるのが以下: - Convert Java to EXE - Why, When, When Not and How -- https://www.excelsior-usa.com/articles/java-to-exe.html とはいえ2019年になりJava8がEOL、Java11がLTSとなった今、javapackagerに頼ることは(少なくともFXアプリを作るのでなければ)厳しい。 一応、Java11にポーティングされたjavapackagerが単体であるにはあるらしく、それを使ったビルド方法の解説記事もあるが・・・ちと厳しいかなぁ・・・。 - Using the Java Packager with JDK 11 – Adam Carroll – Medium -- https://medium.com/@adam_carroll/java-packager-with-jdk11-31b3d620f4a8 仕事柄触ってる有名どころのJavaアプリ + インストーラとしては、PortSwigger の Burp Suite がある。これ、インストーラのEXEが提供されてて、インストールするとjarとjreがバンドルされてて、OSのアプリ一覧(Windowsならスタートメニュー)にも登録され、簡単に起動できる。 - Download Burp Suite Community Edition -- https://portswigger.net/burp/communitydownload Burp Suite の場合、INSTALL4J という商用製品を使ってるらしい。C:\Program Files\BurpSuiteCommunity\.install4j というフォルダができてて、そこにいろいろ入ってた。 - Multi-Platform Java Installer Builder - install4j -- https://www.ej-technologies.com/products/install4j/overview.html 良さそうではあるが、有償なのが敷居が高い・・・。製品というわけでもなく、社内でちょっと使う程度のツールでどこまで金を出せるか・・・。あと、OSS作りたいとか。 もちろんJava開発陣も javapackager が無くなったことは気にしてるらしく、以下のJEP 343でjavapackagerと同等で、もうちょっとシンプルなパッケージングツール作りたいね、という話は進んでるらしい。 - JEP 343: Packaging Tool -- http://openjdk.java.net/jeps/343 が、さすがにこれのリリースを待つのは気が長すぎる、現状の範囲内でJava8~Java11の移行期を乗り切れる無償の、できればOSSフレンドリなツールはないか? →とりあえず見つかったのが以下。 - JSmooth - Java Executable Wrapper -- http://jsmooth.sourceforge.net/ - exewrap -- https://exewrap.osdn.jp/ - Launch4j - Cross-platform Java executable wrapper -- http://launch4j.sourceforge.net/ Win7環境とちょっと古い記事になるが、実際に3種類試した人が記事書いてくれてた: - launch4jで、Javaプログラム(.jar)をexeファイルでラップする - Symfoware -- https://symfoware.blog.fc2.com/blog-entry-1020.html ただ、上記記事では JSmooth と exewrap が若干微妙なところがあるらしい。起動後しばらくしてマウスカーソルが砂時計になったり(JSmooth)、jvm.dllがロードできない(exewrap)など。 以下はexewrapを使って配布パッケージを作ってみた人の記事。ここでは問題なさそう。 - OpenJDKでJavaアプリ配布パッケージを作る -- https://blogs.osdn.jp/2018/11/26/openjdk-app.html ざっとググった主観だが、利用者と実績が一番多いのは Launch4j に思える。StackOverflowでの質疑応答も多いっぽい。 また、exewrapはWin専用だが、Launch4j はMacも対応している(要 Xcode)。 Launch4jはJREバンドルも対応してるようなので、最も無難な選択肢に思える。 Launch4jを使った記事の参考: - Java11 + JavaFXでランチャーとプロファイリング – tesshu.com -- https://tesshu.com/javafx/launcher-and-profiling-with-java-11-javafx -- JavaFXアプリをLaunch4jでパッケージングしてる。 - JavaアプリをExe化するLaunch4jの使い方と仕組み - seraphyの日記 -- https://seraphy.hatenablog.com/entry/20130810/p1 - portability - How to bundle a JRE with Launch4j? - Stack Overflow -- https://stackoverflow.com/questions/7071133/how-to-bundle-a-jre-with-launch4j/7582064 また、Java9でのモジュール導入により、Java11にもなれば jdeps + jlink で必要なモジュールのみでJREの容量を削減できらしい。これも Launch4j と組み合わせられると嬉しいかも。 - アプリケーション配布用に小さなJREを作る -- https://blogs.osdn.jp/2018/03/26/jre-minimize.html 機会があれば、Launch4jちょっと触ってみたい。GUIだけなら単体で動かせるようだが、Mavenプラグイン経由となるとどうもMinGWが必要っぽいのでそのあたりの差異も試してみたい。 以上。 #navi_footer|Java|