原文はこちら。
The original article was written by Nicolai Parlog (Java Developer Advocate at Oracle).
https://inside.java/2024/06/18/quality-heads-up/
OpenJDK Quality Groupは、リリースの全体的な品質向上の手段としてOpenJDKビルドを使ってのFOSSプロジェクトのテストを推進しています。
Quality Outreach
https://wiki.openjdk.java.net/display/quality/Quality+Outreach
このHeads upは、関係するプロジェクトに送られる定期的なコミュニケーションの一部です。
JDK 23 Feature Freeze / New Loom EA builds
https://mail.openjdk.org/pipermail/quality-discuss/2024-June/001135.html
このプログラムの詳細と参加方法については、上記wikiをご覧ください。
JDK 23: Changes Default Annotation Processing Policy
アノテーション処理はコンパイル時の機能で、javac
がコンパイル対象のソースファイルをスキャンし、アノテーションを検知すると、クラスパスから対応するアノテーションプロセッサーを検索し、ソースコードを生成します。JDK 22 までは、この機能はデフォルトで有効になっていました。2006年頃にJDK 6に導入された当時は妥当だったかもしれませんが、現在の観点から見ると、意図せずにクラスパス上に置かれたアノテーションプロセッサに対してビルド出力をより堅牢にするために、妥当性はかなり低くなっています。そのため、JDK 23からはjavac
でアノテーション処理を有効にするには、コマンドラインオプションを追加で指定する必要があります。
New -proc
Value
そのため、既存のオプション -proc:$policy
を拡張し、$policy
に以下の値が使用できるようになりました。
$policy | 意味 | 備考 |
---|---|---|
none | アノテーション処理せずにコンパイル | このポリシーは JDK 6 以降から存在 |
only | コンパイルせずにアノテーション処理 | このポリシーは JDK 6 以降から存在 |
full | アノテーション処理後にコンパイル | このポリシーは JDK 22 以前ではデフォルトの動作ながら、この値自体は新しいもの (対応バージョンは次章を参照) |
JDK 22までは、コンパイル前にアノテーション処理が必要なコードベースはjavac
のデフォルトの動作に依存してアノテーションを処理できました。しかし、JDK 23 からは、少なくとも 1 つのアノテーション処理コマンドラインオプションを指定する必要があります。-processor
、--processor-path
、--processor-module-path
のいずれも使用しない場合は、-proc:only
または -proc:full
を指定する必要があります。つまり、他のコマンドラインオプションがない場合、JDK 23 では -proc:none
がデフォルトとなります。
Migration to -proc:full
プロジェクトが -proc:full
への移行に備えることができるよう、いくつかの対策が講じられています。
- 2024年4月のJDKセキュリティアップデートにより、Oracle JDKとOpenJDKの両ディストリビューションで、
-proc:full
のサポートが17u(17.0.11)と11u(11.0.23)にバックポートされました。さらに、Oracleの8uリリース(8u411)も-proc:full
をサポートしています。 - JDK 21 以降、デフォルトポリシーのもとでアノテーション処理の暗黙的な使用を検出した場合、javacが情報メッセージを表示します。
-proc:full
がバックポートされたことで、javac
のデフォルトポリシーの変更前と変更後とで同様に動作するビルドを構成できるようになっています。
More Details
詳細は以下のオリジナルの提案をご覧ください。
Proposal to change default annotation processing policy in JDK 23
https://mail.openjdk.org/pipermail/jdk-dev/2024-May/009028.html
訳注
このHeadsupは、以下のものと関連しています。