1. ホーム
  2. メイヴン

[解決済み】JARパッケージングにおけるmaven scope compileとprovidedの違いについて

2022-03-29 05:56:46

質問

mavenのスコープの違いは何ですか? compileprovided アーティファクトがJARとしてビルドされたとき?WARであれば、アーティファクトがWEB-INF/libに含まれるかどうかがわかります。しかし、JARの場合、それは重要ではありません - 依存関係は含まれていません。依存関係は含まれません。 compile または provided . 私が知っているのは provided 依存関係は推移的ではない - しかし、それは1つの違いだけですか?

解決方法は?

からの メイヴンドック :

  • コンパイル

    これはデフォルトのスコープで、何も指定されていない場合に使用されます。コンパイル の依存関係は、プロジェクトのすべてのクラスパスで利用可能です。 さらに、それらの依存関係は依存するプロジェクトに伝搬されます。

  • 提供

    これはコンパイルとよく似ていますが、JDKまたは コンテナは、実行時に依存関係を提供します。たとえば、次のような場合です。 Java Enterprise Edition 用のウェブアプリケーションを構築する場合、次のようになります。 Servlet API および関連する Java EE API の依存関係を「Servlet API」「Java EE API」に設定します。 スコープが提供されています。この スコープは、コンパイルとテストのクラスパスでのみ使用可能であり、そのスコープは は遷移的ではありません。

振り返ってみてください。

  • 依存関係が推移的でない(ご指摘の通りです)
  • provided スコープはコンパイルとテストのクラスパスでのみ利用可能ですが、compile スコープはすべてのクラスパスで利用可能です。
  • 提供された依存関係はパッケージ化されない