web-dev-qa-db-ja.com

Project Jigsaw vs Maven

ジグソープロジェクト から:

Java SEおよびEEプラットフォームの両方で、開発者がライブラリと大規模アプリケーションを構築および保守しやすくします。

私はプロジェクトJigsawが何であるかを学ぼうとしていますが、これまではProject Jigsawの目標はMaven(またはGradle)依存関係管理を使用して行ったものと多少重複しているようです:

  • Mavenのようなツールを構築することは脅威ですか?
  • または、私の理解が間違っていて、プロジェクトJigsawが何らかの形でこれらのビルドツールを補完する予定ですか?
37
sud29

非常に単純化された答え

Jigsawの後、publicはJARスコープ内でのみパブリックになります。 JAR外のクラスを表示するには、エクスポートする必要があります。

モジュール間相互作用はmodule-infoファイルで指定する必要があるため、Javaはモジュール化を強制します。

たとえば、WARを作成する場合、WARはほとんど変更されませんが、WAR内のすべてのJARパッケージはmodule-infoを定義する必要があります(または定義しないで、自動または名前のないモジュールとして扱われます)。

Mavenには、依存関係の管理と構築の2つの主要な機能があります。

  • 依存関係管理とは、Mavenがライブラリーのバージョンを判別し、リポジトリーからそれらをダウンロードできることを意味します。
  • ビルドとは、Mavenがコードをコンパイルしてアーティファクトにパッケージ化できることを意味します。

結論として:Mavenは引き続きビルドを担当しますが、Jigsawモジュールを使用してコンパイルおよびパッケージ化する方法を学ぶ必要があります。

35
michaldo

モジュールは、ツールを構築するための脅威ではありません。ビルドツールconstructビルド時にアーティファクトとそのバージョンの依存グラフを構築するため、モジュールはビルドツールを補完しますが、モジュールenforceビルド時および実行時のアーティファクト/モジュール(バージョンは含まれません)の依存関係。

モジュールシステムの状態 から:

"A module’s declaration does not include a version string, nor
constraints upon the version strings of the modules upon which it
depends. This is intentional: It is not a goal of the module system
to solve the version-selection problem, which is best left to build
tools and container applications."
11
Jay