JDK 23でアノテーション処理ポリシーが変更、明示的な有効化が必須に。17uと11uにも-proc:fullが移植

JDK 23でアノテーション処理ポリシーが変更、明示的な有効化が必須に。17uと11uにも-proc:fullが移植

公開: 更新:


【時間がない人向け】記事の3行要約

  • JDK 23ではアノテーション処理のデフォルトポリシーが変更され明示的な有効化が必要に
  • アノテーション処理を使用する場合は-proc:fullオプションを指定する必要がある
  • -proc:fullは17u、11u、8uにもバックポートされ移行が容易化された

Python基礎・実践(Django)

企業・法人向けのPython研修では、基礎から応用まで体系的に学べます。

Python研修の詳細

DX社員研修

企業・法人向けのDX研修では、実務に繋がるリスキリングでITレベルを向上させます。

DX研修の詳細

Javaエンジニア育成研修

企業・法人向けのJavaエンジニア育成研修では、Javaの基礎から応用まで確実に習得できます。

Java研修の詳細

新卒・新入社員向け研修

企業・法人に新入社員・新卒社員に向けたプログラミング研修を提供しています。

新入社員研修の詳細

コードキャンプのIT研修を全て見る

Java 17と11でもアノテーション処理ポリシーの変更に対応

JDK 23ではjavacのアノテーション処理に関するデフォルトの動作が変更され、明示的にオプションを指定しない限りアノテーション処理が実行されなくなる。この変更はアノテーションプロセッサがクラスパスに意図せず含まれてしまった場合のビルド出力の堅牢性を高めるためのものだ。[1]

アノテーション処理を使用するコードベースでは、少なくとも-processor、--processor-path、--processor-module-pathのいずれかのオプションを指定するか、-proc:onlyまたは-proc:fullを明示的に指定する必要がある。これらのオプションを指定しない場合、JDK 23ではデフォルトで-proc:noneが適用される。

移行を容易にするため、-proc:fullオプションは2024年4月のセキュリティアップデートでJDK 17u(17.0.11)、11u(11.0.23)、およびOracle JDK 8u(8u411)にもバックポートされている。これにより、javacのデフォルトポリシー変更の前後で同じビルド設定を使用することが可能になる。

JDK 23でアノテーション処理のデフォルトがオフに

JDK 6で導入されたjavacのアノテーション処理機能は、ソースファイルからアノテーションをスキャンしてアノテーションプロセッサを実行することで、コンパイル時のコード生成を可能にする。JDK 22までは、この機能がデフォルトで有効になっていた。

しかし、アノテーションプロセッサがクラスパスに意図せず含まれてしまった場合のビルド出力の安定性を高める観点から、JDK 23ではアノテーション処理をデフォルトで無効化し、明示的なオプション指定を必須とする仕様変更が行われた。-proc:noneがデフォルトポリシーとなり、アノテーション処理を行うには-proc:onlyか-proc:fullの指定が必要だ。

JDK 21では、デフォルトポリシーの下で暗黙的なアノテーション処理の使用が検出された場合に情報メッセージが出力されるようになっており、将来の変更に備えた移行措置が取られていた。-proc:fullが17uと11u、8uにバックポートされたことで、ポリシー変更の前後でビルド設定を統一できるようになった。

おすすめのPython研修一覧

Python研修を提供しているおすすめの企業・法人を一覧で掲載しております。

Python研修の一覧を見る

おすすめのDX研修一覧

DX研修を提供しているおすすめの企業・法人を一覧で掲載しております。

DX研修の一覧を見る

おすすめのJava研修一覧

Java研修を提供しているおすすめの企業・法人を一覧で掲載しております。

Java研修の一覧を見る

おすすめのJavaScript研修一覧

JavaScript研修を提供しているおすすめの企業・法人を一覧で掲載しております。

JavaScript研修の一覧を見る

trends編集部「K」の一言

JDKのアノテーション処理ポリシー変更は、ビルドの堅牢性を高めるための仕様変更であり、基本的には歓迎すべき方向性だと言えるだろう。アノテーションプロセッサは、ビルド時のコード生成を可能にする強力なツールである一方で、意図せずクラスパスに含まれてしまった場合に予期しない動作を引き起こす可能性がある。デフォルトを無効化することで、そうしたリスクを軽減できる。

ただし、これまでアノテーション処理に依存していたビルドでは、明示的なオプション指定が必須になるため、一定の移行作業が必要だ。特に、古いバージョンのビルドツールやプラグインを使っているプロジェクトでは、-proc:fullへの対応状況を確認する必要がある。JDKのリリースノートやツールのドキュメントを参照し、適切に設定を更新していくことが求められる。

フレームワークライブラリの開発者は、アノテーション処理を使用する際のベストプラクティスをユーザーに提示することが重要だろう。ビルドスクリプトのサンプルを提供したり、-proc:fullへの移行手順を解説したりすることで、ユーザーがスムーズに新しいポリシーに対応できるようサポートすべきだ。コード生成を利用する場面では、ビルドの再現性や移植性に十分配慮し、適切なオプションを設定するよう呼びかけることが望ましい。

今回のJDKの変更は、ツールベンダーやライブラリ開発者、アプリケーション開発者が協調して対応していくことで、Javaエコシステム全体のセキュリティと安定性の向上につながることが期待できる。単にオプションを追加するだけでなく、アノテーション処理の適切な使い方について改めて見直し、健全なビルドプラクティスを追求していくことが肝要だろう。一時的な移行コストはあるものの、長期的にはJavaプラットフォームの発展に寄与するものと考えられる。

References

  1. ^ Inside Java. 「Quality Outreach Heads-up - JDK 23: Changes Default Annotation Processing Policy – Inside.java」. https://inside.java/2024/06/18/quality-heads-up/, (参照 24-06-20).

※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。

ITやプログラミングに関するコラム


ITやプログラミングに関するニュース

ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。

コードキャンプIT・プログラミング研修事例/現場により近いところにデジタルを根付かせるDX基礎講座研修|株式会社ブリヂストン - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/業務の効率化・DX推進に向けたIT人材育成への第一歩|株式会社カナエ - ITやプログラミングを知って学べるコネクトメディア 企業・法人向けのIT・プログラミング研修 - ITやプログラミングを知って学べるコネクトメディア 中途採用者向けのIT・プログラミング研修 - IT・プログラミングを知って学べるコネクトメディア

新着記事

対象者別で探す

子供(小学生・中学生・高校生)向け
プログラミング教室検索する

子供(小学生・中学生・高校生)がロボットやプログラミング言語を学ぶことができるオフラインからオンラインスクールを検索、比較することが可能です。

子供(小学生・中学生・高校生)
プログラミング教室検索する

ITやプログラムなどの
最新情報を検索する

日々、新しいITやプログラミング言語の情報が流れていきますが、特定の情報を時系列でニュースやコラムを確認することができます。

ITやプログラムなどの
最新情報を検索する