ウェブサイト検索

Java 9 モジュール


Java 9のモジュールは、Javaの構造における最大の変化の一つです。ここでは「Java 9モジュールシステム」についての簡単な概要を紹介します。

Java 9 モジュール

私たちはJava 9モジュールシステムに関する次のトピックを調査します。

  1. 紹介
  2. Java SE 9: ジグソープロジェクト
  3. 現在のJavaシステムの問題は?
  4. Java SE 9 モジュールシステムの利点
  5. JDK 8とJDK 9を比較する
  6. Java 9 モジュールとは何ですか?
  7. Java 9 モジュールシステムの母
  8. Java 8とJava 9のアプリケーションを比較する

紹介

オラクル社はJava 9のリリースを2017年3月から2017年9月に延期しました。Java SE 8には3つの大きな新機能(およびいくつかの改善と新機能)が搭載されていることはご存知の通りです。

  1. ラムダ式
  2. ストリームAPI
  3. 日付API

同様に、Java SE 9 には 3 つの大きな機能(さらにいくつかの改善と新機能)が搭載されています。

  1. Javaモジュールシステム(ジグソープロジェクト)
  2. Java REPL
  3. ミリングプロジェクトコイン

この投稿では、Oracle Jigsawプロジェクトの基本について議論します。

Java SE 9: ジグソープロジェクト

ジグソープロジェクトは、Java SE 9の完全に新しい概念であるJavaモジュールシステムを導入しようとしています。これは、Java SE 9のリリースにおけるオラクル社の非常に大きく、権威のあるプロジェクトです。最初は、Java SE 7のリリースの一部としてこのプロジェクトを開始しました。しかし、大きな変更により、Java SE 8に延期され、その後再び延期されました。今、これは2017年9月にJava SE 9とともにリリースされる予定です。ジグソープロジェクトの主な目標:

  • モジュラーJDK 現在のJDKシステムは非常に大きいため、彼らはJDK自体を小さなモジュールに分割することを決定しました。その利点については、次のセクションで説明します。- モジュラーソースコード 現在のソースコードのjarファイルは非常に大きく、特にrt.jarは非常に大きいです。したがって、Javaのソースコードをより小さなモジュールに分割する予定です。- モジュラーランタイムイメージ この機能の主な目的は「JDKとJREのランタイムイメージをモジュールに合わせて再構築すること」です。 - ほとんどの内部APIをカプセル化する この機能の主な目的は「JDKの内部APIのほとんどをデフォルトでアクセスできないようにするが、いくつかの重要で広く使用される内部APIをアクセス可能にする」ことです。- Javaプラットフォームモジュールシステム この機能の主な目的は「ユーザーが自分のモジュールを作成してアプリケーションを開発できるようにする」ことです。- jlink: Javaリンカー このjlinkツールの主な目的は「ユーザーが自分のアプリケーションの実行可能ファイルを作成できるようにする」ことです。

これらのことを明確に理解していなくても心配しないでください。今後のセクションや私の次の投稿で、役立つ例を交えてこれらの概念を詳しく説明します。

現在のJavaシステムの問題は?

このセクションでは、「なぜJava SE 9モジュールシステムが必要か」について議論します。これは、現在のJavaシステムの問題を意味します。Java SE 8以前のシステムには、Javaベースのアプリケーションの開発や配信において以下のような問題があります。

  • JDKは非常に大きいため、小型デバイスにスケールダウンするのは少し難しいです。Java SE 8はこの問題を解決するために、compact1、compact2、compact3の3種類のコンパクトプロファイルを導入しました。しかし、これでは問題は解決しません。
  • rt.jarなどのJARファイルは、小型デバイスやアプリケーションで使用するには大きすぎます。
  • JDKは非常に大きいため、私たちのアプリケーションやデバイスはより良いパフォーマンスをサポートできません。
  • 現在のJavaシステムには強いカプセル化がありません。なぜなら、「public」アクセス修飾子があまりにもオープンで、誰でもアクセスできるからです。
  • JDKのように、JREは大きすぎるため、アプリケーションのテストと保守が難しいです。
  • 一般公開されているため、彼らはsun.*や*.internal.*などの一部の内部非重要APIへのアクセスを避けることはできません。
  • ユーザーが内部APIにもアクセスできるため、セキュリティは大きな問題です。
  • アプリケーションが大きすぎます。
  • コンポーネント間の結合を減らすのは少し難しいです。

これらすべての問題を解決するために、オラクル社はJava SE 9リリースでJavaモジュールシステムを導入する予定です。

Java SE 9 モジュールシステムの利点

Java SE 9モジュールシステムは以下の利点を提供します

  • Java SE 9ではJDK、JRE、JARなどを小さなモジュールに分割するため、私たちは必要なモジュールを自由に使用できます。そのため、Javaアプリケーションを小型デバイスに容易にスケールダウンすることができます。
  • テストの容易さとメンテナンス性。
  • より良いパフォーマンスをサポートします。
  • 公共(public)は単なる公共ではなく、非常に強力なカプセル化をサポートしています。(心配しないでください、これは大きな概念です。すぐにいくつかの便利な例を使って探求します。)
  • 内部の非重要なAPIにもうアクセスできなくなりました。
  • モジュールは望ましくない内部の詳細を非常に安全に隠すことができるため、より良いセキュリティを得ることができます。
  • アプリケーションは非常に小さいです。なぜなら、私たちは必要なモジュールだけを使用できるからです。
  • コンポーネント間の結合を緩めることは簡単です。
  • 単一責任原則(SRP)をサポートするのは簡単です。

私たちはこれらの概念を一つ一つじきに探求します。

JDK 8とJDK 9を比較する

JDKソフトウェアに何が含まれているかはわかっています。JDK 8ソフトウェアをインストールした後、Java Homeフォルダーにはbin、jre、libなどのいくつかのディレクトリが見えます。しかし、Oracle社はこのフォルダー構造を以下のように少し異なる形に変更しました。

Java 9 モジュールとは何ですか?

モジュールは、コード、データ、いくつかのリソースの自己記述的コレクションです。これは、関連するパッケージ、タイプ(クラス、抽象クラス、インターフェースなど)を、コードとデータ、およびリソースとともに含むセットです。各モジュールは、単一責任原則(SRP)をサポートする関連するコードとデータのセットのみを含んでいます。

Java 9 モジュールシステムの母

現在、Java 9 モジュールシステムには、Early Access JDKに95のモジュールがあります。Oracle社は、JDKのJARとJava SE仕様を2つのモジュールセットに分けました。

  • すべてのJDKモジュールは「jdk.*」で始まります。
  • すべてのJava SE仕様モジュールは「java.*」で始まります。

Java 9 モジュールシステムには「java.base モジュール」があります。これは基本モジュールとして知られています。独立したモジュールであり、他のモジュールには依存していません。デフォルトでは、他のすべてのモジュールはこのモジュールに依存しています。だからこそ、「java.base モジュール」は Java 9 モジュールの母とも呼ばれています。これはすべての JDK モジュールとユーザー定義モジュールのためのデフォルトモジュールです。

Java 8とJava 9のアプリケーションを比較する

私たちはすでにJava 5、6、7、または8を使用して多くのJavaアプリケーションを開発しています。Java 8またはそれ以前のアプリケーションがどのようなものであり、何を含んでいるのかを知っています。簡潔に言えば、以下に示すように、Java 8アプリケーションを図で表しました:

Java 8以前のアプリケーションでは、トップレベルのコンポーネントはパッケージです。これは、関連する型のセットをグループにまとめます。また、一連のリソースも含まれています。Java 9のアプリケーションは、これとあまり違いはありません。新たに「モジュール」と呼ばれるコンポーネントが導入され、関連するパッケージのセットをグループにまとめるために使用されます。また、モジュール記述子(「module-info.java」)という新しいコンポーネントも追加されました。それだけです。それ以外のアプリケーションは以前のバージョンと同じです。

  • ワンモジュール
  • モジュール名
  • モジュール記述書
  • パッケージのセット
  • タイプとリソースのセット

ここでリソースはmodule-info.java(モジュール記述子)または他のプロパティやXMLである可能性があります。この投稿では理論についてかなり話し合いました。Java 9 モジュールシステムの基本を理解するには十分だと思います。次回の投稿で基本的なモジュール開発を始めます。必要に応じて、より多くの理論的概念やJava 9 モジュールシステム用語について説明します。「Java 9 モジュールシステムの紹介」トピックは以上です。次回の投稿では、Java SE 9 モジュールシステムの概念についてもいくつか議論します。私の投稿が気に入った場合、または問題や提案、タイプミスがあればコメントをください。チュートリアルを読んでいただきありがとうございます。Java SE 9 学習を楽しんでください!参考文献:Project Jigsaw

関連記事: