Java 9モジュール

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

Java 9モジュール

Java 9モジュールシステムに関して以下のトピックを見ていきます。

  1. 紹介
  2. Java SE 9: Jigsawプロジェクト
  3. 現行のJavaシステムの問題点
  4. Java SE 9モジュールシステムの利点
  5. JDK 8とJDK 9の比較
  6. Java 9モジュールとは何か
  7. Java 9モジュールシステムの元祖
  8. Java 8とJava 9のアプリケーションの比較

紹介

Oracle社は、Java 9のリリースを2017年3月から2017年9月に延期しました。Java SE 8には3つの大きな新機能(およびいくつかの追加機能と改善)が含まれていました。

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

同様に、Java SE 9には3つの大きな機能(およびいくつかの追加機能と改善)が含まれています:

  1. Javaモジュールシステム(Jigsawプロジェクト)
  2. Java REPL
  3. Milling Project Coin

In this post, we will discuss Oracle Jigsaw project basics.

Java SE 9: Jigsaw Project

Jigsawプロジェクトは、Java SE 9の完全に新しいコンセプト、Java Module Systemを紹介する予定です。これは、Oracle CorpによるJava SE 9リリースでの非常に大きな、名声あるプロジェクトです。最初はJava SE 7リリースの一環としてこのプロジェクトを開始しましたが、大きな変更があり、Java SE 8に延期されました。その後、再び延期されました。現在、Java SE 9と共に2017年9月にリリースされる予定です。Jigsawプロジェクトの主な目標:

  • モジュラー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では、この問題を解決するために3種類のコンパクトプロファイル(compact1、compact2、compact3)が導入されました。しかし、これはこの問題を解決しません。
  • rt.jarなどのJARファイルは、小さなデバイスやアプリケーションで使用するには大きすぎます。
  • JDKが大きすぎるため、アプリケーションやデバイスがより良いパフォーマンスをサポートすることができません。
  • 現在のJavaシステムには強いカプセル化がないため、「public」アクセス修飾子があまりにもオープンです。誰でもアクセスできます。
  • JDKやJREが大きすぎるため、アプリケーションのテストやメンテナンスが難しくなります。
  • 公開があまりにもオープンなため、一部の内部の非クリティカルAPI(sun.*、*.internal.*など)にアクセスを避けることができません。
  • ユーザーが内部APIにアクセスできるため、セキュリティも大きな問題です。
  • アプリケーションが大きすぎます。
  • コンポーネント間の疎結合をサポートするのは少し難しいです。

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

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

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

  • Java SE 9はJDK、JRE、JARなどを小さなモジュールに分割するため、必要なモジュールのみを使用できます。そのため、Javaアプリケーションを小型デバイスに縮小するのは非常に簡単です。
  • テストと保守の容易さ。
  • より良いパフォーマンスのサポート。
  • 公開が単なる公開ではなく、非常に強力なカプセル化をサポートしています(大きな概念ですが、すぐにいくつかの有用な例で探求します)。
  • 内部の非クリティカルAPIにアクセスできなくなりました。
  • モジュールは不要な内部の詳細を安全に非表示にでき、より良いセキュリティを提供します。
  • アプリケーションは必要なモジュールのみを使用するため、非常に小さくなります。
  • コンポーネント間の結合を少なくサポートするのは簡単です。
  • 単一責任の原則(SRP)をサポートするのは簡単です。

これらの概念を順次探求していきます。

JDK 8とJDK 9の比較

私たちはJDKソフトウェアが含まれるものを知っています。JDK 8ソフトウェアをインストールすると、Java Homeフォルダ内にbin、jre、libなどのディレクトリがいくつか表示されます。ただし、Oracle Corpはこのフォルダ構造を以下のように少し異なる方法で変更しました。 JDK 8フォルダ構造: JDK 9フォルダ構造: ここで、JDK 9にはJREが含まれていません。JDK 9では、JREは別の配布フォルダに分離されています。JDK 9ソフトウェアには新しいフォルダ「jmods」が含まれています。以下に示すように、Java 9モジュールのセットが含まれています。 JDK 9では、rt.jarとtools.jarはありません 注意: 本日時点で、「jmods」には95のモジュールが含まれています。最終リリースでは増える可能性があります。「jmods」フォルダは${JAVA_HOME}/jmodsにあります。これらはJDKモジュールとして知られています。

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

A Module is a self-describing collection of Code, Data, and some Resources. It is a set of related Packages, Types (classes, abstract classes, interfaces etc) with Code & Data and Resources. Each Module contains only a set of related code and data to support Single Responsibility (Functionality) Principle (SRP). The main goal of Java 9 Module System is to support Modular Programming in Java. We will discuss on “What is a Module Descriptor” and “How to develop Java Modules” in my coming posts.

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

現在、Java 9のモジュールシステムには、アーリーアクセスJDKに95のモジュールがあります。Oracle Corpは、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アプリケーションはこれと大きな違いはありません。関連するパッケージのセットをグループ化するために使用される新しいコンポーネント「モジュール」が導入されました。そして、もう1つの新しいコンポーネントがモジュール記述子(「module-info.java」)です。それだけです。アプリケーションの残りは、以下に示すような以前のバージョンのアプリケーションと同じです。Java 8アプリケーションがトップレベルのコンポーネントとしてパッケージを持っているのと同様に、Java 9アプリケーションはモジュールをトップレベルのコンポーネントとして持っています。注:-各Java 9モジュールには1つのモジュールと1つのモジュール記述子があります。 Java 8パッケージとは異なり、1つのモジュールに複数のモジュールを作成することはできません。要するに、Java 9モジュールには以下の主要なコンポーネントが含まれています:

  • モジュール
  • モジュール名
  • モジュール記述子
  • 一連のパッケージ
  • 一連の型およびリソース

ここでのリソースはmodule-info.java(モジュールディスクリプタ)またはその他のプロパティやXMLです。この投稿では理論的な話をたくさんしました。これでJava 9モジュールシステムの基本を理解するのに十分だと思います。次回の投稿では基本的なモジュール開発を始めます。必要に応じて、理論的なコンセプトやJava 9モジュールシステムの用語についてもさらに説明します。これで「Java 9モジュールシステムの紹介」に関するすべてです。次回の投稿では、Java SE 9モジュールシステムのさらなるコンセプトについても詳しく説明します。投稿が気に入ったか、問題や提案、タイプのエラーがあればコメントを残してください。チュートリアルを読んでいただきありがとうございます。Java SE 9の学習を楽しんでください!

Source:
https://www.digitalocean.com/community/tutorials/java-9-modules