Java 8 以降、JDK は、jdeps (Java クラス依存関係アナライザー) と呼ばれるコマンド・ライン・ユーティリティーを出荷しています。jdeps コマンドは、クラスの従属関係を分析し、内部 JDK パッケージにフラグを立てるための追加のパラメーターを提供します。WebSphere Migration Tool が、アプリケーションで検出されるマイグレーション問題の大多数にフラグを立てる一方、jdeps ツールは、新しい Java バージョンにマイグレーションした後に使用可能でなくなる内部 JDK パッケージの追加検出を提供できます。
jdeps コマンドは、バイナリーまたはソースの WebSphere Migration Tool によってフラグを立てられた問題を解決した後に、最終ステップとして実行することをお勧めします。jdeps コマンドは、アプリケーションの Java 成果物に対して実行します。正確な結果を得るには、計画されたターゲット JDK インストール済み環境 (JDK 11 など) で使用可能な jdeps コマンドを -jdkinternals パラメーターを指定して使用します。例えば、Java 11 を使用するように環境を設定した後、以下のコマンドを実行します。
| jdeps -jdkinternals C:\demo\Apps\myapplication.jar |
Java 9 以降、ほとんどの JDK 内部へのアクセスが制限されるようになりました。ただし、マイグレーションを援助するため、この強力なカプセル化は、Java 8 で存在していた API に対してはデフォルトでオフにされました。
Java 16 以降、--illegal-access ランチャー・オプションのデフォルト値は permit ではなく deny に設定されます。推奨はされませんが、Java 16 では --illegal-access=permit を指定することでこの制限をバイパスできます。--illegal-access を warn または debug に設定することもでき、それらは permit と同じ効果を持ちますが、warn を使用すると警告メッセージが出され、debug を使用すると、不正なリフレクティブ・アクセス操作に関するスタック・トレースを取得できます。
Java 17 以降にマイグレーションする場合、--illegal-access ランチャー・オプションは使用できません。ほとんどの JDK 内部は強力にカプセル化されるようになりました。推奨はされませんが、--add-opens ランチャー・オプションまたは Add-Opens JAR マニフェスト属性を使用して、アプリケーションまたはサード・パーティー・ライブラリーに必要な特定のパッケージをオープンすることによって、この制限をバイパスすることができます。
この変更によってカプセル化されない一部の重要な内部 API には、以下が含まれます。
ユーティリティーは、JDK 内部クラスの参照を識別する出力を生成し、可能な場合、提案される置換 API を提供します。
注: jdeps コマンドは、.class ファイル、ディレクトリー、または JAR ファイルのみを受け入れます。
jdeps コマンドについて詳しくは、
jdeps リファレンス・ページを参照してください。