web-dev-qa-db-ja.com

Java 8モジュールはOSGiとどう違うのですか?

ProjectJigsawを使用したJava8は、モジュールシステムをSDKにもたらします。パッケージ(ビルトイン)の一部であるため、良いことだと思います。 OSGiはモジュールシステムも提供しますが、コンテナーが必要です。しかし、それとは別に、それらの間の主な違いは何ですか。

OSGiを使用している場合、標準のJDK 8リリースを使用して実行できますか?

デフォルトのSDKにそのような機能が含まれている場合、OSGiは関連しますか?私の理解では、OSGiとJigsawの両方を使用して、serベースのアプリ(servletなど)だけでなく、通常のモジュラーJavaアプリケーションを作成できます。

質問に対する答え OSGi、Java Modularity and Jigsaw は、JREにはおそらくJigsawモジュールシステムが必要であると述べています。 JREでは、OPはJavaで記述されたIO、CORBA、RMIなどのJava標準ライブラリを意味すると思いますか、それともターゲットとなるこれらの基礎となるクラスライブラリ実装ですか?ジグソープロジェクトのページを読んでみると、前者だと思います。それが遅い場合、それはJavaコードを書く他のJava開発者をどのように助けますか?クラスライブラリはC/C++で記述されています。誰か明確にしていただけませんか?

これはOSGi対ジグソーではありません。どれを使うのか本当に理解したいです。新しいアプリケーション(デスクトップでもサーバーでも)を作成する場合は、標準の実装では時代遅れにならず、アバンダンウェアになる可能性のあるテクノロジに基づいて作成したいと思います。私はOSGiが時代遅れだと言っているのではなく、OSGiが好きです。私は全体像を見ています。OSGi自体の将来の方向性は何ですか。

21
user235273

すでにコメントに書かれているように、Java 8はジグソーに同梱されません。たぶんJava 9。

また、JavaOne2013でMarkReinholdの講演に参加しましたが、ジグソーの方向性は一般的にJava開発者には開かれていないようです。つまり、JREはジグソーをモジュール化するために使用します。 JRE(読み取り:rt.jar)自体ですが、Java開発者が使用することは想定されていません。与えられた理由の1つは、JigsawがMaven、OSGiなどの既存のソリューションと競合してはならないことです。もう1つの理由は、Sun。*内部パッケージへのアクセスをシャットダウンすることでした。

しかし、その日遅くにBOFに参加した誰かから、コミュニティからJava開発者向けにジグソーを開くようにという要求があったと聞きましたが、それに関する更新は聞いていません。

いずれにせよ、OSGiはJigsawで正常に動作するはずです。しかし、古いSun。*パッケージやその他の内部JREコードを引き続き使用すると、多くのライブラリがJava 9で機能しなくなります。

2015年3月更新

EclipseCon 2015で、MarkReinholdが基調講演を行いJava 9. Java 9にはJava用のモジュールシステムが含まれます。これはJRE /を対象としています。 JDKは、それを使用したいすべてのJavaアプリケーションでも使用できます。ただし、スコープが少し変更されました。

主な違い(2015年3月現在)は次のとおりです。

  • クラスローダー-ジグソーパズルはクラスローダーを使用しません。モジュールやクラスローダーを操作するのはランタイム(アプリケーションサーバーやOSGiなど)次第です
  • 依存関係-ジグソーパズルでは、モジュールへの依存関係を名前で指定できますが、パッケージレベルでは指定できません
  • 動的サービス-OSGiによって提供されるランタイムサービスモデルは、Jigsawによって提供されません

Jigsawは、他のランタイムまたはビルドタイムモジュールシステム(OSGiやMavenなど)を置き換えたり、競合したりすることを目的としていません。実際、ジグソーは両方と(どういうわけか)相互運用可能であることが意図されています。

23
Gunnar