jlinkで他プラットフォームのJREを作成する(クロス・ターゲット)

以前の記事 JRE が単体で配布されなくなった理由 では Java アプリケーションに軽量化した JRE をバンドルする配布方式について紹介しました。

従来のシステムワイドに Java をインストールする方法では 一部のアプリケーションの都合で Java のバージョンを据え置かなければならない状況を生むことがありました。1 つのアプリケーションが新しいバージョンの Java で動作検証されていない たったそれだけの理由で古い Java が使われ続けるなんてこともあったのです。古いバージョンの Java がシステムに居座り続けていると 当然 悪循環に陥ります。

 すでに Java 5 がインストールされているから新規アプリも Java 5 で作ってね!

もうこれ一生抜け出せないパターンじゃないですか…。

JavaFXアプリケーション開発にはLiberica JDKがオススメ

私はこれまで JavaFX アプリケーションの開発に Oracle OpenJDK Gluon JavaFX の組み合わせを使ってきました。JDK OpenJFX をマージするバッチファイルを作ったりもしました。

でも そんな手間を掛ける必要はなかったんです。はじめから OpenJFX がバンドルされている OpenJDK ディストリビューションを使えば済む話だったのです。OpenJFX をバンドルしている OpenJDK それが Liberica JDK です。

JettyでFreeMarkerを使うとテンプレートが見つけられなくなる

FreeMarker テンプレートエンジンを使った Web アプリケーションを Jetty アプリケーションサーバーで数日稼働させていると以下の例外が発生することがありました。

freemarker.template.TemplateNotFoundException: Template not found for name "index.ftl".

なぜかテンプレート ファイルが見つけられなくなってしまうのです。その原因は Jetty Windows にありました。

Gradleプロジェクトの雛形をカスタマイズする

私は Java コードを書くのに Eclipse を使っています。以前はプロジェクト形式として標準の Java Project を選択していましたが 現在は Gradle プロジェクト形式を選択するようにしています。

Gradle の素晴らしさを知ったのは Android アプリケーションの開発で Android Studio に触れた折でした Android Studio のプロジェクト形式は Gradle プロジェクト形式だったのです。以来 Android 以外の Java アプリケーション開発 Web サーバーアプリや JavaFX アプリ でも Gradle プロジェクト形式を採用するようになりました。

今回は Gradle プロジェクトの雛形をカスタマイズする方法を紹介します。

Java 12に対応したexewrap 1.4リリース

Java 12 に対応した exewrap 1.4 をリリースしました。

exewrap 1.3.1 以前のバージョンで作成した実行ファイルを Java 12 で実行するとコンソールに以下の警告メッセージが表示されます。メッセージが表示されるだけでアプリケーションの動作自体には問題ありません

OpenJDK 64-Bit Server VM warning: Archived non-system classes are disabled because the java.system.class.loader property is specified (value = "Loader"). To use archived non-system classes, this property must not be set

この問題が exewrap 1.4 で改善しています。exewrap 1.4 で作成した実行ファイルであれば Java 12 実行環境でも上記のメッセージは表示されなくなります。

JavaでBrotli(ブロートリ)を使う

Java Brotli 圧縮する方法を紹介します。

Brotli ブロートリ 2015 年に Google が発表した圧縮アルゴリズムおよびその実装です。zlib よりも 15~25%くらい圧縮率が高くなります。LZMA と比べてもわずかに圧縮率が高いです。

Brotli の展開には専用のデコーダーが必要になりますが すでに Chrome Firefox Edge Safari Opera など主要なブラウザーが Brotli をサポートしています。

JavaでZopfli(ツオップリ)を使う

Java Zopfli 圧縮する方法を紹介します。

Zopfli ツオップリ 2013 年に Google が発表した圧縮アルゴリズムおよびその実装です。zlib よりも 3~8%くらい圧縮率が高くなります。圧縮率だけで言えば Zopfli を上回るアルゴリズムはいくつもあります。Zopfli の最大の特徴は Deflate 互換であることです。つまり Zopfli で圧縮したデータは既存の Deflate デコーダーで展開することができます。

JavaFXバインディングで宣言的プログラミングを実現する

JavaFX にはバインディングという強力な仕組みがあります。バインディングを導入することで 従来の命令的だった手続き型プログラミングを宣言的なプログラミングに変えることができます。この記事では バインディングとはなにか? 宣言的とはどういうことか? 概念的な説明だけでなく具体的な GUI サンプル アプリケーションを例に解説していきます。

JavaFXダイアログのボタン表示を変更する

JavaFX にはダイアログを表示するための Alert というクラスがあります。とても 便利なのですが 確認ダイアログを表示したときのボタンはいまいちだと思うのです。

ボタンのキャプションが 取消 ですよ。AWT/Swing の時代は 了解 取消し という表示だったので 了解 OK に変わっただけでも改善が見られるわけですが…。どうせなら 取消し キャンセル に変更しておいて欲しかったです。

文句を言っても仕方ありません。自前で JavaFX ダイアログのボタン 取消 キャンセル に置き換えてしまいましょう。

Apache Commons Logging のログ出力を抑制する

Apache Commons Logging Log4j java.util.logging など他のロガー実装に処理を委譲してくれるブリッジ ライブラリです。Apache Commons Logging API を使ってログを出力するようにコードが書かれていれば ログ出力に使う実装を java.util.logging から Log4j に切り替えるといったことが簡単にできます。