Javaはカレントディレクトリを使わない

Java 11 から user.dir システムプロパティを実行時に変更することができなくなりました。この変更によって 相対パスを解決する開始点を実行時に変更している一部のアプリケーションが影響を受けます。

user.dir システムプロパティとカレントディレクトリの関係について説明します。

IntelliJ IDEAでGradleプロジェクトの実行がエラーになる!?

Eclipse で開発していた JavaFX アプリケーション Gradle プロジェクト形式 がありました。この Gradle プロジェクトを IntelliJ IDEA にインポートして実行すると IllegalStateException: Location is not set. というエラーが発生してアプリケーションの起動に失敗してしまいました。Eclipse では実行できていたのになぜ?

その原因は Eclipse IntelliJ IDEA のリソースの扱いの違いにありました。Gradle プロジェクトでリソースをどこに配置するのがよいか紹介したいと思います。

書式化したまま編集できるテキストフィールドを作る(JavaFX)

先日 インターネットバンキングで振込操作をしたのですが ユーザーインターフェースの出来があまり良くないと感じました。振込金額の欄に 3 桁区切りのカンマが表示されず 100 万円を振り込むために 1000000 と入力する必要があったのです。

 いち じゅう ひゃく せん まん

画面の数字を 1 桁ずつ指差しながら数えて金額に間違いがないことを確認しました。一応 確認画面に進むとカンマ付きで 1,000,000円 と表示されたのですが 画面遷移するまで書式化された表示にならないのってユーザビリティとしてどうなの?

他所様のシステムに文句を言いたいわけじゃないんです。自分も同じような実装をしてきたなあと反省してしまったのです。画面遷移するまで書式化されないというほど酷くはなかったのですが…

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 実行環境でも上記のメッセージは表示されなくなります。

ApacheでのLet's Encrypt運用が簡単になりました
2019-07-10 Web Windows

Let’s Encrypt は無料でサーバー証明書を発行してくれる認証局です。2016 年のサービス開始以来 急速に普及しています。

Let’s Encrypt の証明書発行には ACME プロトコルに対応したクライアントソフトウェアを使います。主要な ACME クライアントソフトウェアは ACME Client Implementations で紹介されています。Let’s Encrypt のサイトでは certbot というツールが推奨されているのですが このツールは Windows には対応していません。Windows 環境では win-acme 旧名 letsencrypt-win-simple というツールが良く使われているようです。

私も これまで win-acme を使ってきたのですが 先日 ふとしたことで mod_md という Apache モジュールの存在を知りました。mod_md win-acme よりもずっと簡単に使えます。ただし mod_md Apache モジュールであるため Apache 環境でしか使えません。IIS など他のウェブサーバーに Let’s Encrypt を導入するのであれば 引き続き win-acme が有力な選択肢になります。

Apache 2.4.30 以降で利用可能になった mod_md モジュールを使って Let’s Encrypt 証明書を導入する手順を紹介していきます。