システム開発で思うところ

Javaで主にシステム開発をしながら思うところをツラツラを綴る。主に自分向けのメモ。EE関連の情報が少なく自分自身がそういう情報があったら良いなぁということで他の人の参考になれば幸い

プロパティファイルからEnumを生成

Pluggable Annotation Processing APIを使用して、プロパティファイルからEnumクラスを生成するプロジェクトです.

ビルドの都度、自動で生成するので常にプロパティファイルとEnumの整合性が取れた状態が保てます.

vermeer.hatenablog.jp

の続きであり、私が作成したいと思っていたプロジェクトでもあります.

概要

本プロジェクトを使用することで以下のことが実現できます.

  • コンパイル都度、自動生成するので常にPropertiesファイルとEnumの整合性が取れた状態が保てます
  • Propertiesファイルへの参照を統一的に行えます
  • Propertiesファイルを参照する実装がタイプセーフになります
  • 実装中にPropertiesの値を確認できます(IDEによるJavaDoc参照を経由)
  • 国際化対応(実装中、稼働中)の制御ができます
  • 指定した置換文字数がProperties値の内容と相違している場合は実行時例外にします

使い方

詳細の使い方は、プロジェクトのREADMEを参照してください.

maven/org/vermeerlab/annotation-processor-command-propertyfile-enum at mvn-repo · vermeerlab/maven · GitHub

プロジェクトのCode

BitBucket

以下の紹介は本ツールの作成解説のようなもの。

似たようなものを作るのであれば参考になるかと思います。

vermeer.hatenablog.jp

さいごに

当初、Pluggable Annotation Processing APIを使ったツールとして コンパイル都度、ResourceファイルからEnumを自動生成するものを作っていて、それを紹介する形で 実装サンプルとして紹介できれば と思って記事を書き始めました。

そのまま それを紹介をしようと思ったのですが

  • 1つの記事で伝えることが多くなりすぎる
  • 大きな1つのプロジェクトよりも段階的に説明をした方が読み手にも伝わりやすいし、自分の整理にもなるのでは?

と思って「Pluggable Annotation Processing API Sample(実践編…)」として 当初のプロジェクトのパッケージを分割しつつ 記事を書くことにしたのですが、それが迷走の入り口だったというか、整理中に気が付いたことや見直したいことが どんどんと発生して記事の途中に それ以外のことを掲載することになってしまいました。

結果、まとまりのない状態になり 書き手である私自身も振り返りにくい状態になってしまいました。

始めから焦らず ちゃんと作りきってから その解説という風にすれば良かったな、と。。

予想よりも躓いたのは、AnnotationProcessorとMavenとClassLoaderの組み合わせでした*1

動的にあれこれしなければ、そこまで困らなかったと思いますが、結果として色々と勉強になったので良かったかな、と思っています。

*1:単体のテストではうまくいくのに、結合テストをするとダメだったり、テストではうまくいくのに プロジェクトを参照するクライアントアプリ側で実行しようとしたらダメだったり。