検索

2.6. Java ライブラリークラス

download PDF

Red Hat build of OpenJDK 9 で導入された Java Platform Module System (JPMS) は、非公開 API へのアクセスを制限または防止します。JPMS は、クラスパスやモジュールパスの使用など、Java アプリケーションを起動およびコンパイルする方法にも影響を与えます。

デフォルトでは、Red Hat build of OpenJDK 11 は JDK 内部モジュールへのアクセスを制限します。アプリケーションを移植する際のこの制限の回避策として、java コマンドにオプションを渡すことにより、アプリケーションの内部パッケージへのアクセスを提供できます。これらのオプションは、次の例で示されています。

--add-opens <module-name>/<package-in-module>=ALL-UNNAMED

--add-opens java.base/jdk.internal.math=ALL-UNNAMED
注記

Red Hat build of OpenJDK リリースサイクルの更新のため、以前の回避策は無期限に機能するわけではありません。Red Hat build of OpenJDK の将来のリリースでは、この回避策は廃止されます。

さらに、--illegal-access=warn オプションを java コマンドに渡すことで、不正アクセスのケースを確認できます。このオプションは、Red Hat build of OpenJDK のデフォルトの動作を変更します。

JPMS リファクターリングにより、Red Hat build of OpenJDK 11 の ClassLoader 階層が変更されます。Red Hat build of OpenJDK 11 は、システムクラスローダーを内部クラスに設定するため、Java プログラムはシステムクラスローダーにアクセスできません。

たとえば、ClassLoader::getSystemClassLoader を呼び出し、その結果を Red Hat build of OpenJDK 11 上の URLClassLoader にキャストする既存の Red Hat build of OpenJDK 8 のアプリケーションコードは、URLClassLoader がシステムクラスローダーの一部ではないため、機能しない可能性があります。Red Hat build of OpenJDK 11 で URLClassLoader に結果をキャストしようとすると、ランタイム例外メッセージを受け取る可能性があります。

Red Hat build of OpenJDK 11 には、特定のクラスのロードを制御できる新しいクラスローダーが含まれています。これにより、クラスローダーが必要なすべてのクラスを見つける方法が改善されます。

クラスローダーを作成すると、その親として null を渡すことができなくなります。Red Hat build of OpenJDK 11 でこれを行うと、親としてクラスローダーが選択されず、新しいクラスローダーはプラットフォームクラスを見つけることができません。ClassLoader.getPlatformClassLoader() API を使用して、プラットフォームクラスローダーのインスタンスを取得できます。

関連情報

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.