Quality Outreach Heads-up – JDK 23: Changes Default Annotation Processing Policy

原文はこちら。
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は、以下のものと関連しています。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください